У меня есть проект lerna, который содержит два идентичных пакета (названные p1 и p2)
Оба p1 и p2 включают сторонний пакет - для этого теста я использовал eosjs @ beta, который составляет около 50 КБ
Если я затем создаю пример реагирующего проекта и включаю P1, размер пакета увеличивается на 50 КБ, как и ожидалось, но меня удивляет то, что, когда я добавляю p2…, он увеличивается еще на 50 КБ.
Можно подумать, что поскольку p1 и p2 используют одну и ту же стороннюю библиотеку, одна ссылка на эту библиотеку будет скомпилирована в пример проекта.Но этого не происходит.
Пример репо здесь: https://github.com/warrick-eosny/sizetest
Рост пакета выглядит следующим образом:
ls examples / sizetest / build / static / js / -lah
Перед ссылками p1
117K 1.13eeb203.chunk.js
1.4K main.2170ea98.chunk.js
1.5K runtime~main.229c360f.js
После ссылки p1
165K 1.75baab58.chunk.js
3.7K main.36960386.chunk.js
1.5K runtime~main.229c360f.js
После ссылки p1 и p2
212K 1.57bb37cb.chunk.js
6.4K main.491260eb.chunk.js
1.5K runtime~main.229c360f.js
Проект в примерахпапка была создана с помощью:
npx create-response-app sizetest –typescript
Оба пакета p1 и p2 были созданы с использованием:
yo node-typescript-webpack
Почему примерная сборка продолжает расти .. Скорее всего, веб-пакет достаточно умен, чтобы включать только одну ссылку.
=============== ОБНОВЛЕНИЕ ==================
Удаление дубликатовраздел "код" здесь, кажется, должен решить мою проблему: https://developers.google.com/web/fundamentals/performance/optimizing-javascript/code-splitting/#spitting_code_by_multiple_entry_points
Но, похоже, это не так.
- Я запустил «извлечение пряжи» в папке проекта, а затем добавил предложенную конфигурацию: https://github.com/warrick-eosny/sizetest/blob/master/examples/sizetest/config/webpack.config.js#L196-L211
- Удален раздел uglyfiy, чтобы вывод читался
- Запустите сборку снова
Это создаст файл общего доступа, но когда вы посмотрите на содержимое:
grep \@module build/static/js/commons.bd2f73cb.chunk.js
вы увидите, что код все еще дублируется
* @module Serialize
* @module Numeric
* @module RPC-Error
* @module Serialize
* @module Numeric
* @module RPC-Error
* @module API
* @module JSON-RPC
* @module API
* @module JSON-RPC