module 配置处理模块的规则。
rules 配置模块的读取和解析规则,通常用来配置 Loader。
module.exports = {rules: [{// 命中 JavaScript 文件test: /\.js$/,// 用 babel-loader 转换 JavaScript 文件// ?cacheDirectory 表示传给 babel-loader 的参数,用于缓存 babel 的编译结果,加快重新编译的速度use: ['babel-loader?cacheDirectory'],// 只命中 src 目录里的 JavaScript 文件,加快 Webpack 的搜索速度include: path.resolve(__dirname, 'src'),},{// 命中 SCSS 文件test: /\.scss$/,// 使用一组 Loader 去处理 SCSS 文件// 处理顺序为从后到前,即先交给 sass-loader 处理,再将结果交给 css-loader,最后交给 style-loaderuse: ['style-loader', 'css-loader', 'sass-loader'],// 排除 node_modules 目录下的文件exclude: path.resolve(__dirname, 'node_modules'),},{// 对非文本文件采用 file-loader 加载test: /\.(gif|png|jpe?g|eot|woff|ttf|svg|pdf)$/,use: ['file-loader'],},],};
在 loader 需要传入多个参数时,可以通过 Object 来描述。
use: [{loader: 'babel-loader',options: {cacheDirectory: true,},// enforce: 'post' 的含义是将该 Loader 的执行顺序放到最后// enforce 的值还可以是 pre,代表将 Loader 的执行顺序放到最前面enforce: 'post',},];
test、include、exclude 这三个命中文件的配置项之传入了一个字符串或正则,其实他们也支持数组类型。
{test: [/\.jsx?$/,/\.tsx?$/],include: [path.resolve(__dirname, 'src'),path.resolve(__dirname, 'tests')],exclude: [path.resolve(__driname, 'node_modules'),path.resolve(__dirname, 'bower_modules')]}
只要文件的路径满足其中任何一个条件,就会被命中。
可以通过 exclude
、include
配置来确保转译尽可能少的文件。顾名思义,exclude
指定要排除的文件,include
指定要包含的文件。
exclude
的优先级高于 include
,在 include
和 exclude
中使用绝对路径数组,尽量避免 exclude
,更倾向于使用 include
。
noParse 配置项可以让 Webpack 忽略对部分没采用模块化的文件的递归解析和处理,这样做的好处是能提高构建性能。原因是一些库如 jQuery、ChartJS 庞大又没有采用模块化标准,让 Webpack 去解析这些既耗时又没有意义。
noParse 是可选的配置项,类型需要是 RegExp、[RegExp]、function 中的一种。
被忽略的文件里不应该包含 import、require、define 等模块化语句,不然会导致在构建出的代码中包含无法在浏览器环境下执行的模块化语句。
与 noParse 配置项的区别在于,parser 可以精确到语法层面,而 noParse 只能控制哪些文件不被解析。
module: {rules: [{test: /\.js$/,use: ['babel-loader'],parser: {amd: false, // 禁用AMDcommonjs: false, // 禁用CommonJSsystem: false, // 禁用SystemJSharmony: false, // 禁用ES6 import/exportrequireInclude: false, // 禁用 require.includerequireEnsure: false, // 禁用 require.ensurerequireContext: false, // 禁用 require.contextbrowserify: false, // 禁用 browserifyrequireJs: false, // 禁用 requirejs},},];}
⚠️ 配置 Loader 需要注意:
css-loader?minimize
特性:
esbuild
是用 Go 语言写的,并且编译为 Native Codeesbuild
中的所有内容都是从头编写的