Webpack генерирует разные чанки с одинаковым хешем контента - PullRequest
2 голосов
/ 21 марта 2019

У меня есть конфигурация 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],....

Одно из отличий новой версии от старых заключается в том, что ядобавлены новые точки разделения кода.

Итак: кажется, что новые точки разделения изменили порядок чанков, но в веб-пакете все еще используется то же сгенерированное имя файла (возможно, потому что contenthash относится к содержимому модуля области?).

Проблема критическая: когда новый файл копируется на сервер, он перезаписывает старый файл, и поэтому клиент, использующий старую версию, больше не работает, потому что чанк загружен в неправильную позицию в массиве push (я думаю).

Ошибка:

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

Есть способ исправить эту проблему, возможно, присвоение имен выдвинутым чанкам, указание порядка или создание разных хэшей?chunkhash?

1 Ответ

1 голос
/ 21 марта 2019

Webpack использует идентификаторы в качестве ссылок на чанки, и эти идентификаторы не гарантируют, что они будут одинаковыми для одинаковых чанков в разных сборках. contenthash используется для файлов, извлеченных ExtractTextWebpackPlugin. Тот же исходный контент получит тот же contenthash, но сгенерированный файл может отличаться из-за изменений id.

Попробуйте использовать myproj-[name]-[chunkhash].chunk.js.

Также взгляните на settings.moduleIds и optimization.chunkIds настройки.

...