我刚意识到,如果你使用require.ensure()
动态加载模块,webpack不会将依赖项分析和分块在一起。从某种程度上讲,这是有道理的,因为webpack无法知道是否传输了这些模块,但我们能否强制webpack完成这项工作呢?
示例:
app.js:
require.ensure([ 'module1.js' ], ( require ) => {
// at some point
require( 'module1.js' );
}, 'Module1');
require.ensure([ 'module2.js' ], ( require ) => {
// at some point
require( 'module2.js' );
}, 'Module2');
module1.js
let io = require( 'socket.io-client' );
module2.js
let io = require( 'socket.io-client' );
编译的结果是,这两个模块都将整个socket-io库“链接”到它们的块中。我的初始预期是,CommonsChunkPlugin会捕获这些需要,并将该大型库放入一个公共块中。
new webpack.optimize.CommonsChunkPlugin( 'common' ),
然而,它并不起作用。当然我可以手动“解决”这个依赖关系,但我希望webpack能以某种方式解决这个问题?