webpack - HOWTO 控制 webpack4 包块
问题描述
看起来很简单的不是我点击...我正在尝试创建三个单独的捆绑包:
(1) node-vendors-[hash].bundle.js:来自 node_modules 的东西包 (2) vendor-config-[hash].bundle.js:由供应商提供的所有脚本包,我们使用我们的网站和配置文件。 .. 考虑多种服务,例如 Google Analytics;我们在网站上使用的每个供应商都提供了一个包含帐户详细信息的片段 (3) 我们的自定义脚本
无论配置如何,我都会为上面#2 类别中的每个源文件获取一个包。
const coreVendorSetupFiles = {
vendor1: './scripts/vendors/vendor1/index.js',
vendor2: './scripts/vendors/vendor2/index.js',
vendor3: './scripts/vendors/vendor3/index.js',
vendor4: './scripts/vendors/vendor4/index.js',
ourCode: './scripts/ours/index.ts
};
module.exports = {
entry: coreVendorSetupFiles,
module: {
rules: [
{ test: /\.ts$/, use: 'ts-loader' }
]
},
optimization: {
splitChunks: {
chunks: "all",
cacheGroups: {
vendorConfig: {
test: /[\\/]vendors[\\/]/,
name: 'vendor-config'
}
}
}
},
output: {
path: path.resolve(__dirname, './../dist'),
filename: '[name].bundle-[hash].js'
}
};
我每次得到的是 6 个捆绑包……上面的 #1 和 #3 一个包,但“供应商”文件夹中引用的每个脚本还有 4 个附加包。我知道我的optimization
部分不正确,但无论我改变什么,我都无法让它工作。在搜索并尝试了大量示例之后,绝望地发布:/
解决方案
您不能通过入口点设置块。用于避免重复加载的入口点。那里似乎只有一个入口点:./scripts/ours/index.ts
要拆分vendors.js,请使用cacheGroups,在这里您将拥有与npm pakets 一样多的块。
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
vendorname(v) {
var name = v.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
return `npm.${name.replace('@', '_')}`;
},
},
推荐阅读
- f# - F# / FAKE - 如何在调用 MSBuild 时指定 `--platform:x64`
- java - 用于 Spring Cloud 网关的 HA
- excel - 从 DAX 中的 2 个不同表中过滤
- python - 即使使用信号处理程序也会中断数据库调用
- android - How to shorten URL pointing to my server (NOT MOBILE APP)
- sql - 如何在两列中计算每年和每月'yyyy-mm'的出现次数(包括没有出现的期间)
- php - Prefill Date Field In PHP Form To Be 3 Days In The Future
- javascript - 使用 Datatables 行偏移量计算此 jquery 的工作原理
- python - 通过云功能以无服务器方式将数据从谷歌云存储移动到 Amazon s3
- php - 编辑表格时,它会更新数据库中的最后一个条目而不是选定的条目