Angular 9: NullInjectorError: нет поставщика для CompilerFactory
Получите сообщение при запуске приложения в режиме браузера prod/aot. Ниже мой main-aot.ts
Uncaught NullInjectorError: StaticInjectorError (Платформа: ядро)[CompilerFactory]: NullInjectorError: Нет поставщика для CompilerFactory!
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { platformBrowser } from '@angular/platform-browser';
//import { AppModuleNgFactory } from './app/app.module.ngfactory';
import { AppModule } from './app/app.module';
enableProdMode();
// tslint:disable-next-line:no-console
/*platformBrowser().bootstrapModuleFactory(AppModuleNgFactory).catch(err => {
console.log('CANNOT LOAD AOT MODULE')
console.dir(AppModuleNgFactory);
console.error(err)
});*/
platformBrowser().bootstrapModule(AppModule).catch(err => {
console.log('CANNOT LOAD AOT MODULE')
console.dir(AppModule);
console.error(err)
});
5 ответов
Я получал эту ошибку, потому что я не запускал ngcc, как теперь требуется с Angular 9, когда Ivy включен. Чтобы исправить это, я добавил в свои сценарии package.json следующее:
"postinstall": "ngcc"
Затем запустил:
npm run postinstall
Кроме того, было достаточно следующего кода начальной загрузки, platformBrowserDynamic не требуется при включенном AOT:
platformBrowser().bootstrapModule(AppModule)
В angular 9 с ivy больше нет файлов ngFactory, вам больше не нужен main-aot.ts, должен быть только main.ts
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch(err => console.error(err));
Интересно, что компилятор совместимости angular (ngcc) будет запускаться за кулисами при запуске инструментов cli, но не при прямом использовании инструментов сборки.
Это означает, что вы, вероятно, обнаружите, что, выполняя
ng build
что он отлично работает. Тем не мение,
ng run build
или просто используя инструмент "архитектора" Angular напрямую с каким-нибудь инструментом сборки, таким как Bazel, тогда вам нужно будет запустить
ngcc
командуйте собой.
Уловка после установки @Parliaments должна сработать. Но просто хотел объяснить это поподробнее.
Недавно я столкнулся с похожей ошибкой:
NullInjectorError: No provider for CompilerFactory!
после развертывания моего удаленного сервера. Я сделал автоматическую сборку, которая собирала
dist/
с помощью
npm run build --prod
меняя это на
ng build --prod
у меня сработало!
Пожалуйста, убедитесь, что в ваших средах выполняется / создается приложение с использованием аналогичных инструментов.
Вместо того, чтобы добавлять к вашему
postinstall
скрипт, вы можете попробовать удалить или просто удалить установленные библиотеки Angular и запустить
npm install
. Это также может решить эту проблему.
В моем конкретном случае, похоже, произошло то, что одна из зависимостей - это библиотека Angular, которая компилируется в папку в. После обновления с Angular 10 до 11 эта компиляция, вероятно, была кэширована, но ее следует перекомпилировать.
Так что оба бегут
ngcc
или удаление
node_modules
и переустановка зависимостей, похоже, решает проблему.