Angular CLI - исключить пакет из оптимизации - PullRequest
0 голосов
/ 19 октября 2018

В нашем приложении Angular 6 мы используем готовое приложение React для рендеринга некоторых внутренних компонентов.Скомпилированная версия приложения React устанавливается как модуль узла.

Когда я запускаю код в режиме разработки с ng serve, все работает отлично, как и ожидалось.

Однако при сборкеприложение в --prod, компоненты React начинают вести себя немного по-другому.Возникают некоторые странные проблемы с рендерингом.

Я экспериментировал с настройками angular-cli и понял, что если я отключу optimization ("оптимизация": ложь), проблема исчезнет.Но размер пакета становится в 2 раза больше.

Это настройки, которые я пробовал.И соответствующие результаты:

optimization: false, buildOptimizer: true, vendorChunk: false - 33.3mb (works good)
optimization: true, buildOptimizer: false, vendorChunk: false - 17mb (not working)
optimization: true, buildOptimizer: false, vendorChunk: true - 17mb (not working)

Похоже, что проблема возникает, когда Angular пытается оптимизировать модуль React.

Я подумал, что было бы хорошо включить оптимизацию для всего проекта, кромеРеагировать модуль приложения.Каким-то образом исключите модуль приложения React из конвейера оптимизации и, возможно, объедините его в отдельный блок, если это имеет смысл.

Может кто-нибудь предложить решение?Или есть предположения, почему это могло произойти?

1 Ответ

0 голосов
/ 22 октября 2018

Хорошо, так как нам не удалось найти лучшего решения (пока), мы решили оставить все настройки сборки как есть.Вместо этого мы добавили скрипт main.js из скомпилированной библиотеки React в массив angular.json build.scripts.Таким образом, система сборки Angular добавит эту библиотеку как <script> к index.html как есть.Эта основанная на реакции библиотека скомпилирована как модуль UMD.Таким образом, мы можем получить к нему доступ из глобальной области (window.<libraryName>).

Затем мы удалили все импорты нашей библиотеки React из нашего кода.Теперь процесс сборки Angular полностью игнорирует эту библиотеку и просто добавляет неизмененный источник в виде отдельного скрипта.

Теперь все работает отлично.

...