在
webpack
对文件打包或者构建的时候,都会将rules
里所有的规则都过一遍,这样会影响构建性能,因为单个文件只会匹配rules
里的单条规则,匹配上了就没必要继续匹配,所以这里就用到了oneOf
来处理这个问题。
oneOf的作用
提升构建速度,避免每个文件都被所有loader
过一遍,因为任何一个文件,构建过程中,在遇到第一个与之对应的loader
后,不会再往下进行。
oneOf如何配置
module: {
rules: [
{
oneOf:[
{
test: /\.css$/,
use: ["style-loader", "css-loader"],
},
{
test: /\.html$/,
loader: "html-loader",
},
{
test: /\.js$/,
loader: "eslint-loader",
}
]
}
],
},
但是,实际开发过程中,同样会有一个文件需要匹配多个loader
的场景,比如js
文件同时需要eslint-loader
和babel-loader
,这样的话就不能将两个loader
都放到oneOf
里面,因为一旦匹配了第一个loader
就不会再继续执行第二个loader
,解决办法也很简单,只需要放到oneOf
外面即可。
module: {
rules: [
{
test: /\.js$/,
enforce: "pre",
loader: "eslint-loader",
},
{
oneOf:[
{
test: /\.css$/,
use: ["style-loader", "css-loader"],
},
{
test: /\.html$/,
loader: "html-loader",
},
{
test: /\.js$/,
loader: "babel-loader",
}
]
}
],
},
网友评论