cache-loader
在一些性能开销较大的 loader 之前添加 cache-loader,将结果缓存中磁盘中。默认保存在 node_modueles/.cache/cache-loader 目录下
{test: /\.jsx?$/,use: ['cache-loader','babel-loader']}
happypack thread-loader
HappyPack 就能让 Webpack 做到这点,它把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。
new Happypack({id: 'js', //和rule中的id=js对应use: ['babel-loader'] //必须是数组})//happypack{test: /\.js[x]?$/,use: 'Happypack/loader?id=js',include: [path.resolve(__dirname, 'src')]}//thread-loaderrules: [{test: /\.jsx?$/,use: ['thread-loader', 'cache-loader', 'babel-loader']}]
HardSourceWebpackPlugin
//webpack.config.jsvar HardSourceWebpackPlugin = require('hard-source-webpack-plugin');module.exports = {//...plugins: [new HardSourceWebpackPlugin()]}
noParse
如果一些第三方模块没有AMD/CommonJS规范版本,可以使用 noParse 来标识这个模块,这样 Webpack 会引入这些模块,但是不进行转化和解析,从而提升 Webpack 的构建性能 ,例如:jquery 、lodash。
//webpack.config.jsmodule.exports = {//...module: {noParse: /jquery|lodash/}}
optimization.splitChunks
//webpack.config.jsmodule.exports = {optimization: {splitChunks: {//分割代码块cacheGroups: {vendor: {//第三方依赖priority: 1, //设置优先级,首先抽离第三方模块name: 'vendor',test: /node_modules/,chunks: 'initial',minSize: 0,minChunks: 1 //最少引入了1次},//缓存组common: {//公共模块chunks: 'initial',name: 'common',minSize: 100, //大小超过100个字节minChunks: 3 //最少引入了3次}}}}}
