我正在使用 WebPack CommonsChunkPlugin 来提取重复代码并减少 JavaScript 代码大小。我有两个 HTML 页面和它们的两个入口。此外,我已经添加了 ReactJs 的供应商入口。到目前为止,在 webpack.config.js 中我们有:
var path = require("path");
var webpack = require('webpack');
var BundleTracker = require('webpack-bundle-tracker');
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
context: __dirname,
entry: {
react: ["react", "react-dom"],
home: './assets/js/home.jsx',
about: './assets/js/about.jsx',
},
output: {
path: path.resolve('./assets/bundles/'),
filename: "[name].js",
},
plugins: [
new BundleTracker({filename: './webpack-stats.json'}),
new webpack.optimize.CommonsChunkPlugin({
name: 'react',
minChunks: Infinity
}),
new BundleAnalyzerPlugin(),
],
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
plugins: [["lodash", { "id": ["semantic-ui-react"] }]],
presets: ["es2015", "react"]
}
},
],
},
resolve: {
modules: ['node_modules', 'bower_components'],
extensions: ['*', '.js', '.jsx']
},
};
这是使用webpack-bundle-analyzer的配置结果:
从图中可以看出,有一些重复的代码,一些在红色区域,另一些在绿色区域。我想把这些来自主页和关于页面的js代码提取到单独的包中。为了提取红色区域的代码,即lodash库,我在webpack配置文件中添加了以下几行:
new webpack.optimize.CommonsChunkPlugin({
name: 'lodash',
minChunks: function(module, count) {
return module.context.indexOf('node_modules/lodash') >= 0;
}
}),
但是它并没有按照预期工作,lodash库的代码仍然存在于主页和关于页面的bundle中,同时webpack创建了一个名为lodash的bundle,几乎为空,不包含任何js库。
有什么解决方法吗?提取绿色区域的代码怎么样?