Webpack 生成具有相同 contenthash 的不同块
Webpack generate different chunks with the same contenthash
我有一个 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
是指真正的模块内容?)。
问题很严重:当新文件被复制到服务器上时,它会覆盖旧文件,因此使用旧版本的客户端不再工作,因为块被加载到推送数组的错误位置(我猜) .
错误是:
"Error: Loading chunk 6 failed.
(missing: https://.../myproj-xxx-0bb2f31cc0ca424a07d8.chunk.js)"
有办法解决这个问题,也许是命名推送的块,或者指定顺序,或者生成不同的哈希值? chunkhash
?
Webpack 使用 id 作为块引用,并且不保证这些 id 对于不同构建中的相同块保持相同。 contenthash
用于 ExtractTextWebpackPlugin
提取的文件。相同的源内容将获得相同的 contenthash
,但生成的文件可能因 id
更改而不同。
请尝试使用 myproj-[name]-[chunkhash].chunk.js
。
另请查看 optimization.moduleIds 和 optimization.chunkIds
设置。
我有一个 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
是指真正的模块内容?)。
问题很严重:当新文件被复制到服务器上时,它会覆盖旧文件,因此使用旧版本的客户端不再工作,因为块被加载到推送数组的错误位置(我猜) .
错误是:
"Error: Loading chunk 6 failed.
(missing: https://.../myproj-xxx-0bb2f31cc0ca424a07d8.chunk.js)"
有办法解决这个问题,也许是命名推送的块,或者指定顺序,或者生成不同的哈希值? chunkhash
?
Webpack 使用 id 作为块引用,并且不保证这些 id 对于不同构建中的相同块保持相同。 contenthash
用于 ExtractTextWebpackPlugin
提取的文件。相同的源内容将获得相同的 contenthash
,但生成的文件可能因 id
更改而不同。
请尝试使用 myproj-[name]-[chunkhash].chunk.js
。
另请查看 optimization.moduleIds 和 optimization.chunkIds
设置。