Asset Modules资源模块
Asset Modules 资源模块,针对于图片字体等这一类型的文件模块,无须额外的预处理器,webpack 可以通过一些配置完成对它们的解析,这是 webpack5 新加入的,和 file-loader
,raw-loader
,url-loader
预处理器功能相似
type
Asset Modules 类型通过添加 4 个新的模块 type 来取代所有这些 loader
- asset/resource 发出一个单独的文件并导出 URL。和
file-loader
类似 - asset/inline 和
url-loader
相似,处理文件导入地址并将其替换成 data URL,默认是Base64
格式编码的 URL - asset/source 和
raw-loader
很像,以字符串形式导出文件资源 - asset 在导出单独的文件 和 data URL 间自动选择,可以通过修改配置项影响自动选择的标准
demo
1 | const path = require("path"); |
打包入口文件是a.js
a.js 文件内容:
1 | import img from "./sky.jpg"; |
打包后目录里生成6d99f3aefcfa4bj41a7f.jpg
,这个是 sky.jpg 被 asset/resource 处理后生成的。
自定义文件名称
1. 通过 generator.filename 配置
1 | module: { |
2. 在 output 里配置
1 | module.exports = { |
这两种方式配置资源文件名称的效果是一样,并且只能用于 type 是 asset
和 asset/resource
的情况
asset/inline
打包后文件目录没有新增图片,原始图片被处理成 Base64 编码的 data URL 并直接存放在打包生成的 bundle.js
文件里
dataURL 默认使用 Base64 编码,可以配置 generator.dataURL
进行自定义编码算法。
asset
webpack 默认对于大于 8 KB 的资源 以 asset/resource 处理,否则以 asset/inline 处理
但是我们也可以修改这个资源大小的阙值,在 module.rule 的 parser.dataURLCondition.maxSize
中配置.
1 | const path = require("path"); |
Asset Modules 虽然可以代替部分预处理器的功能,但是要进行个性化配置的时候还是使用预处理器更方便。
比如,目前如果要给预处理器配置 publicPath,目前是做不到,而且 Asset Modules 存在 BUG,还需要修复。
但是 Asset Modules 是 webpack 的未来,文件资源预处理器后续已经不进行维护了,随着 Asset Modules 功能的优化,未来可能会取代 file-loader 等预处理器,我们需要留意 Asset Modules 的最新状态