【发布时间】:2017-08-29 19:49:43
【问题描述】:
想象一下我有一个丰富的应用程序,它使用了很多第三方模块,包括 lodash、moment、axios、反应。
如果我最后将所有内容捆绑在一个包中,大小会高于 1MB。
我希望 webpack 以它存储的方式打包我的库:
- lodash 分开
- 时刻分别
- 所有其他 node_modules 都存储在 vendor bundle 下
- 应用程序的代码存储在单独的文件中
我尝试以不同的方式使用 CommonsChunkPlugin,但从未收到我想要的结果。
我已经准备了示例存储库来说明我的问题: https://github.com/PavelPolyakov/webpack-react-bundles
Webpack 入口部分(conf/webpack.base.config.js):
entry: {
lodash: 'lodash',
moment: 'moment',
app: [
'react-hot-loader/patch',
'webpack-dev-server/client?http://localhost:3001',
'webpack/hot/only-dev-server',
'./app/index.js']
}
这是生产配置 (conf/webpack.production.config.js),试图分离模块:
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: function (module) {
// this assumes your vendor imports exist in the node_modules directory
return module.context &&
module.context.indexOf('node_modules') !== -1;
}
}),
new webpack.optimize.UglifyJsPlugin({
minimize: true,
compress: {
warnings: true
}
})]
在这种情况下,moment 和 lodash 仍然会出现在 vendor bundle 中。我想把它们放在两个单独的包中。
任何想法表示赞赏。
【问题讨论】:
-
您是否尝试过使用 2 个 CommonsChunkPlugin 实例,一个用于
name: "lodash",另一个用于moment?或names: ["lodash", "webpack"],正如docs 所建议的那样。 -
是的,我试过了,但没有帮助。或者我尝试了错误的方式。
标签: webpack webpack-2 code-splitting commonschunkplugin