我有一个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
吗?
答案 0 :(得分:1)
Webpack将ID用作块引用,并且不保证在不同内部版本中相同的块中这些ID保持相同。 contenthash
用于ExtractTextWebpackPlugin
提取的文件。相同的源内容将获得相同的contenthash
,但是由于id
的更改,生成的文件可能会有所不同。
尝试改用myproj-[name]-[chunkhash].chunk.js
。
还请查看optimization.moduleIds和optimization.chunkIds
的设置。