Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 网页包:如何覆盖模块ID?_Webpack_Versioning - Fatal编程技术网

Webpack 网页包:如何覆盖模块ID?

Webpack 网页包:如何覆盖模块ID?,webpack,versioning,Webpack,Versioning,问题是: 我们正在将SPA的代码拆分为多个包。每个包都有自己的版本。因此,在prod中,我们希望根据用户的配置使用不同版本的捆绑包。因此,我们需要确保模块ID不会在版本之间发生变化(对于同一模块) 一种可能的解决方案是在配置中定义recordsPath,并在VC下存储记录文件。但当我们更新libs时,文件总是在增长 另一个选项是覆盖webpack在Compilation.prototype.applyModuleIds中生成模块id的方式(例如,我们可以使用模块的相对路径作为模块id) 这样做安

问题是: 我们正在将SPA的代码拆分为多个包。每个包都有自己的版本。因此,在prod中,我们希望根据用户的配置使用不同版本的捆绑包。因此,我们需要确保模块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_模块
,因此我需要实现自己的行为,从而摆脱了默认的路径比较逻辑。您可能会在散列之前使用正则表达式替换资源路径的版本组件,以达到预期效果