一个基本的 loader 配置
module.exports = {
module: {
rules: [
{
test: /.js$'/,
use: ['babel-loader?cacheDirectory'],
include: path.resolve(__dirname, 'src'),
}
],
},
};
优化方向
test
的需求,不添加多余的后缀名,提高正则表达式性能cacheDirectory
include
来精准包含需要 load 的文件位置exclude
来精准排除不需要 load 的文件['node_moduels']
../node_moduels
./node_modules
中优化方向
./node_modules
, 减少回溯寻找时间module.exports = {
resolve: {
modules: [path.resolve(__dirname, 'node_modules')],
},
}
对于第三方库,在它们的 package.json 中就有指明对于不同平台的入口文件
{
"browser": "xxx.js",
"main": "yyy.js",
}
对于模块运行的平台 target 与 resolve.mainFields 的对应关系是
web | webworker → ['browser', 'module', 'main'] |
['module', 'main']
优化方向
module.exports = {
resolve: {
mainFields: ['main'],
}
}
部分第三方库中,可能包含了两套功能相同的代码,原因可能由于模块化的方法不同,已经编译好的压缩代码
优化方向
module.exports = {
resolve: {
alias: {
'react': path.resolve(__dirname, './node_modules/react/dist/react.min.js'),
},
},
}
这里直接指定了 React 代码的路径,此为生产环境中使用的代码
注意的是,此优化方法适用与整体性较强的代码,即模块中的代码,少了任何一部分都会导致不正常工作。对于工具类库,如 lodash, 当中包含了许多工具类函数,这些函数之间的关联性实际上并不强,就不合适使用此优化方法
优化方向
.json
使 Webpack 忽略没有采用模块化的文件的解析处理,提高构建性能
优化方向
noParse
中忽略解析,如 JQuerymodule.exports = {
module: {
noParse: [Regex1, Regex2, ...],
},
}
注意
import
, require
, define
等模块化语句