Я работаю над проектом Angular, который может лениво загружать в виджеты, а также загружать их из пакета UMD.
В настоящее время я сталкиваюсь с некоторыми проблемами при создании моего текущего проекта для производства с AoTenabled.
Проблема
Сборка AoT не предоставляет компилятор. Поэтому я предоставляю JITCompiler
приложению.
При компиляции модуля с использованием import(path/to/module)
в производственном режиме с JITCompiler
я получаю
main.e522a776bacf42032766.js:1 ERROR Error: No NgModule metadata found for 'function(){}'.
at e.resolve (main.e522a776bacf42032766.js:1)
at e.getNgModuleMetadata (main.e522a776bacf42032766.js:1)
at e._loadModules (main.e522a776bacf42032766.js:1)
at e._compileModuleAndComponents (main.e522a776bacf42032766.js:1)
at e.compileModuleAsync (main.e522a776bacf42032766.js:1)
at e.compileModuleAsync (main.e522a776bacf42032766.js:1)
at t.project (main.e522a776bacf42032766.js:1)
at t._tryNext (main.e522a776bacf42032766.js:1)
at t._next (main.e522a776bacf42032766.js:1)
at t.next (main.e522a776bacf42032766.js:1)
Что изменилось
Перечисляя свойства модуля, есть разница между ng serve
и ng serve --prod
: [ngInjectorDef]
в разработке служат в отличие от []
в производстве.
Мне было интересно,кто-нибудь еще сталкивался с проблемой?
Воспроизведение / тестирование самостоятельно
Здесь есть рабочий стек стека минималистичного проекта: https://stackblitz.com/edit/angular-mpzmle
Для использования в качестве производственного серверавам нужно будет:
- Загрузить zip
- Распаковать zip
- Запустить
npm install
в каталоге извлечения - Настроить tsconfig.json (я не могу настроить его в stackblitz?)
- Изменить модуль: es2015 на esnext
- run
ng serve --prod
и служить для localhost:4200
Альтернативой этому ручному труду является выполнение шагов на https://github.com/juristr/manually-lazy-load-ngmodule/issues/1. Это проектРеализация аналогичной концепции, страдающей от той же проблемы.