Webpack生成具有相同contenthash的不同块

时间:2019-03-21 11:57:48

标签: javascript webpack code-splitting

我有一个Webpack 4.1配置,该配置使用代码拆分并使用myproj-[name]-[contenthash].chunk.js之类的模式输出块名称。

我将所有版本的所有生产捆绑包文件复制到服务器的同一目录中,请确保(直到现在)这些块是唯一的并且没有冲突。

今天,我发现发布应用程序的新版本时遇到了一个问题:我有一个名为myproj-modulex-0bb2f31cc0ca424a07d8.chunk.js的文件,该文件也是由旧版本生成的(这是contenthash的范围,不是吗?)。我希望文件的内容相同,但不相同

仅更改了一个字符(数组索引)。块开始于...

(window.webpackJsonp_XXXX=window.webpackJsonp_XXXX||[]).push([[7],{"2d0274e27fde9220edd9"...

...而旧版本使用的是...push([[6],...

新版本与旧版本的区别之一是我添加了新的代码分割点。

所以:似乎新的拆分点改变了块顺序,但是webpack仍使用相同的生成文件名(可能是因为contenthash是指领域模块内容?)。

这个问题很关键:当新文件复制到服务器上时,它会覆盖旧文件,因此使用旧版本的客户端不再起作用,因为大块在推入数组中的位置错误(我猜)。 / p>

错误是:

"Error: Loading chunk 6 failed.
(missing: https://.../myproj-xxx-0bb2f31cc0ca424a07d8.chunk.js)"

有一种方法可以解决此问题,也许是命名推入的块,指定顺序或生成不同的哈希? chunkhash吗?

1 个答案:

答案 0 :(得分:1)

Webpack将ID用作块引用,并且不保证在不同内部版本中相同的块中这些ID保持相同。 contenthash用于ExtractTextWebpackPlugin提取的文件。相同的源内容将获得相同的contenthash,但是由于id的更改,生成的文件可能会有所不同。

尝试改用myproj-[name]-[chunkhash].chunk.js

还请查看optimization.moduleIdsoptimization.chunkIds的设置。