AOT: ngtools / webpack + ленивая загрузка не работает. Использование: Angular 4, webpack 3

Я пробовал использовать ngtools / webpack для компиляции AOT. Он работал нормально, пока я не попытался создать маршруты с ленивой загрузкой. Я получаю ошибку - Error: Cannot find module './components/dashboard/dashboard.module.ngfactory'.. В папке dist мне также не хватает фрагментов для ленивых пакетов.

Понятия не имею, что делаю не так, я потратил много времени, чтобы это исправить. Я создал простой проект tour of heroes в этом репозитории, где я получаю описанную выше ошибку. Филиал в репо - angular-aot-refactor. Когда вы попадете в корень приложения - просто npm install и npm run dev:aot.

Вопрос - что я делаю так, чтобы не работала ленивая загрузка?

Заранее благодарим за помощь!


person Andrey Ponomarenko    schedule 31.10.2017    source источник


Ответы (1)


Ваша проблема: следующий код:

new webpack.ContextReplacementPlugin(
    // The (\\|\/) piece accounts for path separators in *nix and Windows
    /angular(\\|\/)core(\\|\/)@angular/,
    helpers.root('./src'), // location of your src
    {} // a map of your routes
),

Чтобы понять, почему этот плагин вызывает проблемы при сборке, вы должны знать, как @ angular / cli производит ленивую загрузку модулей. Это очень сложный процесс. Но ключевым моментом здесь является то, что это полагается на @angular/core/src/linker путь.

Поскольку вы заменяете этот путь, карта для модулей отложенной загрузки не будет сгенерирована (angular / cli использует для этого ContextElementDependency).

Поэтому попробуйте отключить ContextReplacementPlugin для производственной сборки.

P.S. Как оказалось, это очень известная проблема:

person yurzui    schedule 03.11.2017