Webpack 网页包:如何覆盖模块ID?
问题是: 我们正在将SPA的代码拆分为多个包。每个包都有自己的版本。因此,在prod中,我们希望根据用户的配置使用不同版本的捆绑包。因此,我们需要确保模块ID不会在版本之间发生变化(对于同一模块) 一种可能的解决方案是在配置中定义Webpack 网页包:如何覆盖模块ID?,webpack,versioning,Webpack,Versioning,问题是: 我们正在将SPA的代码拆分为多个包。每个包都有自己的版本。因此,在prod中,我们希望根据用户的配置使用不同版本的捆绑包。因此,我们需要确保模块ID不会在版本之间发生变化(对于同一模块) 一种可能的解决方案是在配置中定义recordsPath,并在VC下存储记录文件。但当我们更新libs时,文件总是在增长 另一个选项是覆盖webpack在Compilation.prototype.applyModuleIds中生成模块id的方式(例如,我们可以使用模块的相对路径作为模块id) 这样做安
recordsPath
,并在VC下存储记录文件。但当我们更新libs时,文件总是在增长
另一个选项是覆盖webpack在Compilation.prototype.applyModuleIds中生成模块id的方式(例如,我们可以使用模块的相对路径作为模块id)
这样做安全吗?或者我们只是错过了一些东西,并且有一些网页功能或插件来处理我们的问题?在webpack 1.9.x中这样做似乎非常安全。YMMV使用Webpack2,但由于该方法的简单性质,我不希望如此 只要您满足相同模块始终被赋予相同ID的条件,那么webpack将正常工作。我最终使用了以下实现:
var md5 = require('md5');
module.exports = function handleWebpackModuleSymlinks(Compilation) {
Compilation.prototype.applyModuleIds = function() {
this.modules.forEach(function(module) {
if (module.id === null) {
module.id = md5(module.userRequest);
}
}, this);
};
}
这将基于每个文件的解析绝对路径创建模块散列,这是一种开箱即用的行为,但由于在开发过程中使用了符号链接的node_模块
,因此我需要实现自己的行为,从而摆脱了默认的路径比较逻辑。您可能会在散列之前使用正则表达式替换资源路径的版本组件,以达到预期效果