问题: 我们将SPA的代码分成多个捆绑包。每个捆绑包都有自己的版本。所以在prod中我们想要根据用户的配置使用不同版本的bundle。因此,我们需要确保模块ID在版本之间不会发生变化(对于同一模块)。
可能的解决方案之一是在配置中定义recordsPath
并存储记录' VC下的文件。但是当我们更新我们的库时,文件总是会增长。
另一种选择是覆盖webpack在Compilation.prototype.applyModuleIds
中生成模块ID的方式(例如,我们可以使用模块的相对路径作为模块ID)。
这样做是否安全,或者我们错过了什么,并且有一些webpack功能或插件来处理我们的问题?
答案 0 :(得分:1)
在Webpack 1.9.x中执行此操作似乎非常安全。 YMMV与webpack 2,但由于方法的简单性,我不希望如此。
只要您满足条件,即同一模块将始终具有相同的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_modules
抛弃其默认值路径比较逻辑。您可以使用正则表达式在散列之前替换资源路径的版本组件,以达到预期的效果。