Angular 9: значение в позиции X в NgModule.imports не является ссылкой
Я обновил приложение Angular с v8 до v9. Проект импортирует пользовательскую библиотеку пользовательского интерфейса с использованием Angular 8 и moment.js.
Когда я его построю:
- Выдает предупреждение:
WARNING in Entry point '@myLib/catalogue' contains deep imports into
'/Users/xyz/Projects/forms-frontend/node_modules/moment/locale/de'.
This is probably not a problem, but may cause the compilation of entry points to be out of order.
в @myLib/catalogue.js
файл библиотеки (внутри папки node_modules), локаль moment.js DE импортируется следующим образом:
import 'moment/locale/de';
- Также возникают ошибки компиляции:
ERROR in Failed to compile entry-point @myLib/catalogue (es2015 as esm2015) due to compilation errors:
node_modules/@myLib/catalogue/fesm2015/catalogue.js:213:26 - error NG1010: Value at position 2 in the NgModule.imports of FormInputModule is not a reference: [object Object]
213 imports: [
~
214 CommonModule,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
219 TranslateModule
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
220 ],
~~~~~~~~~~~~~~~~~
Кажется, что текст предупреждения точно объясняет ошибку компиляции, когда позиция (в данном случае 2) выходит за пределы диапазона импорта.
Я видел разные статьи / проблемы с github о глубоких ссылках, но рабочего решения не было.
10 ответов
В моем случае проблема была связана с импортированной библиотекой, которая не была совместима с Angular v9 (среди прочего, она не использовала глубокие ссылки на Angular Material и moment.js).
Мне повезло, так как это библиотека для стажеров, и я смог исправить эти моменты и переиздать ее. После этого он без проблем и изменений в моем проекте построился.
вы могли использовать npm i, и редактор мог неправильно сгенерировать сборку. Попробуйте перезапустить редактор. У меня сработал перезапуск. Я использовал VSCode
Вам нужно изменить свою собственную сборку модулей, поэтому вам нужно внести аналогичные изменения в приведенные ниже, в моем случае мне нужно было изменить:
export class ThemeModule {
static forRoot(): ModuleWithProviders {
return <ModuleWithProviders>{
ngModule: ThemeModule,
providers: [
...NbThemeModule.forRoot(
{
name: 'default',
},
[DEFAULT_THEME, COSMIC_THEME, CORPORATE_THEME, DARK_THEME],
).providers,
],
};
}
}
кому:
export class ThemeModule {
static forRoot(): ModuleWithProviders<ThemeModule> {
return {
ngModule: ThemeModule,
providers: [
...NbThemeModule.forRoot(
{
name: 'default',
},
[DEFAULT_THEME, COSMIC_THEME, CORPORATE_THEME, DARK_THEME],
).providers,
],
};
}
}
Если вы используете vscode:
Все, что я сделал, чтобы это исправить, — это перезагрузить vscode.
- Contrl + Shift + P (отобразить палитру команд)
- Введите «Обновить окно» (в палитре команд).
- Нажмите Enter
- Я вижу, что проблема решена при перезапуске vscode.
#2 случилось со мной после того, как я случайно использовал npm link
в папке проекта, а не в папке dist.
У меня эта ошибка, потому что я удалил все из одного из своих компонентов
ts
файл, чтобы скопировать, вставить код, мой инструктор
затем я удалил это объявление компонента из моего файла app.module.ts, тогда он сработал
В моем случае, я думаю, были некоторые несовместимости между некоторыми из импортированных угловых библиотек. Я думаю, что раньше вручную наткнулся@angular/material
к 9.2.3
без столкновения с другими библиотеками angular.
Когда я создал новый репозиторий, используя: ng new test-ng9
а затем добавил угловатый материал ng add @angular/material
, проблем с компиляцией не было.
Поэтому я взял зависимости, которые angular cli включил в репозиторий temp, и заменил те, что были в моем существующем репозитории. Потом нормально заработало.
До:
"@angular/animations": "~9.1.6",
"@angular/cdk": "9.1.1",
"@angular/common": "~9.1.1",
"@angular/compiler": "~9.1.1",
"@angular/core": "~9.1.1",
"@angular/forms": "~9.1.1",
"@angular/material": "9.2.3",
"@angular/platform-browser": "~9.1.1",
"@angular/platform-browser-dynamic": "~9.1.1",
"@angular/router": "~9.1.1",
После:
"@angular/animations": "~9.1.6",
"@angular/cdk": "9.1.1",
"@angular/common": "~9.1.6",
"@angular/compiler": "~9.1.6",
"@angular/core": "~9.1.6",
"@angular/forms": "~9.1.6",
"@angular/material": "^9.2.4",
"@angular/platform-browser": "~9.1.6",
"@angular/platform-browser-dynamic": "~9.1.6",
"@angular/router": "~9.1.6",
Я получил ту же ошибку, но решение, которое сработало для меня, может отличаться от вашего
У меня были разные модули, кроме app.module, например, hom-page.mdule.
Я забыл добавить Home-page.component в Home-page.module в разделе объявлений
У меня возникла та же проблема, что и в моем случае: один из моих пакетов NPM использует одноранговые зависимости, которые не обновляются, поэтому он проверяет наличие справочного модуля, которого нет в более старой версии, после обновления проблемы с одноранговыми зависимостями.
шаги по устранению проблемы.
- Найдите ошибку при выдаче пакета NPM.
- Проверьте наличие справочного модуля (в данном случае TranslateModule).
- Проверьте одноранговый пакет NPM, связанный с эталонным модулем.
- Обновлен одноранговый модуль до последней версии.
Была такая же проблема. Я только что переключился на ветку git и запустил «npm install». Ошибка была везде. Все, что я сделал, это перезапустил свой сервер.
Если у тех, кто читает это, проблемы сохраняются, попробуйте удалить папку node_modules и снова запустить npm install.
С уважением