资源模块(asset module)是一种模块类型,它允许使用资源文件(字体,图标等)而无需配置额外 loader。
该部分是用来解决webpack4+的图片,字体等资源的处理。
在 webpack 5 之前,通常使用:
raw-loader将文件导入为字符串url-loader将文件作为 data URI 内联到 bundle 中file-loader将文件发送到输出目录
资源模块类型(asset module type),通过添加 4 种新的模块类型,来替换所有这些 loader:
asset/resource发送一个单独的文件并导出 URL。之前通过使用file-loader实现。以前使用他来处理打包其他资源的loader。asset/inline导出一个资源的 data URI。之前通过使用url-loader实现。以前使用他来打包样式中图片的loader。asset/source导出资源的源代码。之前通过使用raw-loader实现。asset在导出一个 data URI 和发送一个单独的文件之间自动选择。之前通过使用url-loader,并且配置资源体积限制实现。
配置资源模块的输出文件名和路径
仅适用于
asset和asset/resource模块类型。 通过output属性
output: {
assetModuleFilename: 'fonts/[name][ext]'
}
通过loader中的generator属性
{
test: /\.(eot|svg|ttf|woff|)$/,
type: "asset/resource",
generator: {
// 输出文件位置以及文件名
filename: "fonts/[name][ext]"
},
},
下面就介绍一下webpack5替代webpack4的打包方案
打包样式或者js中的引入的图片
{
//处理图片资源
test: /\.(jpg|png|gif|)$/,
type: "asset",
generator: {
// 输出文件位置以及文件名
filename: "images/[name][ext]"
},
parser: {
dataUrlCondition: {
maxSize: 10 * 1024 //超过10kb不转base64,然后就不会被打包
}
}
},
打包其他资源
{
exclude: /\.(css|js|html|sass|json|png|gif|jpg|jpeg)$/,
type: "asset/resource",
generator: {
// 输出文件位置以及文件名
filename: "others/[name][ext]"
},
},
html中引入的图片资源依旧通过html-loader来打包
{
test: /\.html$/,
loader: 'html-loader'
},