Angular 9: значение в позиции X в NgModule.imports не является ссылкой

Я обновил приложение Angular с v8 до v9. Проект импортирует пользовательскую библиотеку пользовательского интерфейса с использованием Angular 8 и moment.js.

Когда я его построю:

  1. Выдает предупреждение:
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';


  1. Также возникают ошибки компиляции:
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 использует одноранговые зависимости, которые не обновляются, поэтому он проверяет наличие справочного модуля, которого нет в более старой версии, после обновления проблемы с одноранговыми зависимостями.

шаги по устранению проблемы.

  1. Найдите ошибку при выдаче пакета NPM.
  2. Проверьте наличие справочного модуля (в данном случае TranslateModule).
  3. Проверьте одноранговый пакет NPM, связанный с эталонным модулем.
  4. Обновлен одноранговый модуль до последней версии.

Была такая же проблема. Я только что переключился на ветку git и запустил «npm install». Ошибка была везде. Все, что я сделал, это перезапустил свой сервер.

Если у тех, кто читает это, проблемы сохраняются, попробуйте удалить папку node_modules и снова запустить npm install.

С уважением

Другие вопросы по тегам