gpt4 book ai didi

javascript - Webpack:如何使用 CommonsChunkPlugin 将条目捆绑到多个公共(public) block ?

转载 作者:可可西里 更新时间:2023-11-01 01:42:08 25 4
gpt4 key购买 nike

假设我有两个页面 Page1Page2,它们都使用一些库( vendor ),如 jquery backbone 我想将其提取为单个文件,然后我希望将共享模块(不包括 vendor )提取到另一个文件中,这是 webpack 配置:

function listFiles(srcpath) {
return fs.readdirSync(srcpath).filter(function (file) {
return fs.statSync(path.join(srcpath, file)).isDirectory();
});
}
var createEntry = function (src) {
var dest = {
vendor: ["backbone", "underscore"]
};
var files = listFiles(src);
files.forEach(function (dir) {
var name = dir;
dest[name] = src + "/" + dir + "/entry.js";
});
return dest;
};

//each sub directory contains a `entry.js` as the entry point for the page
var entries = createEntry("./app/pages");// {vender:['jquery','backbone'],page1:'src/page1/entry.js',page2:'src/page2/entry.js' }

var config = {
resolve: {
root: path.resolve('./app/'),
extensions: ['', '.js']
},

plugins: [
new webpack.optimize.CommonsChunkPlugin("vendor", "vendor.js", Infinity),
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
filename: 'common.js',
minChunks: 2
})
],
entry: entries,
output: {
path: './../main/webapp/static/dist',
filename: '[name].js',
publicPath: '/static/dist'
}
};
module.exports = config;

但是使用上面的配置:

common.js 包含 webpack 运行时,

page1.js包含page1指定模块和共享模块

page2.js 包含page2指定模块和共享模块

这意味着 page1.jspage2.js 包含太多重复代码。

然后我尝试更改配置:

var entries = createEntry("./app/pages");
var chunks = [];
for (var k in entries) {
if (k === 'vendor')
continue;
chunks.push(k);
}


new webpack.optimize.CommonsChunkPlugin("vendor", "vendor.js", Infinity),
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
filename: 'common.js',
minChunks: 2,
chunks:chunks
}),

然后

common.js 包含 webpack 运行时和 vendor 库,以及共享模块

vendor.js 包含 webpack 运行时和 vendor 库。

page1.js 包含page1指定的模块

page2.js 包含page2指定模块

看起来更接近了,但是 common.js 不应该包含 vendor

有什么问题吗?

最佳答案

如果你想要多个公共(public) block 包,你必须为每个公共(public) block 指定所有 block 的详细信息,如所示 in the example :

var config = {

entry: {
vendor: ["backbone", "underscore"],
common: "./app/pages/common/entry.js",
page1: "./app/pages/page1/entry.js",
page2: "./app/pages/page2/entry.js"
},

plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: "vendor",
chunks: ["vendor"]
}),
new webpack.optimize.CommonsChunkPlugin({
name: "common",
chunks: ["common"]
})
]
};

请注意,CommonsChunkPluginchunks 选项是指您定位的条目的名称。当你想从 common 中分离出 vendor 时,你必须明确地说你只想在 vendor 中输入 vendor common-chunk 和 common 相同。

关于javascript - Webpack:如何使用 CommonsChunkPlugin 将条目捆绑到多个公共(public) block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35908253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com