Angular 9:NgModule.imports 中 X 位置的值不是参考

Fra*_*sco 11 deeplink angular angular-cli-v9

我将 Angular App 从 v8 升级到 v9。该项目使用 Angular 8 和 moment.js 导入自定义 UI 库。

当我构建它时:

  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.
Run Code Online (Sandbox Code Playgroud)

@myLib/catalogue.js库文件中(在 node_modules 文件夹中),moment.js DE 语言环境被导入如下:

import 'moment/locale/de';
Run Code Online (Sandbox Code Playgroud)


  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                 ],
    ~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

警告的文本​​似乎准确地解释了编译错误,其中位置(在本例中为 2)超出了导入数组的范围。

我看过有关深层链接的不同文章/ github 问题,但没有可行的解决方案。

Muh*_*mar 107

您可能使用过 npm i,并且编辑器可能无法正确生成构建。尝试重新启动您的编辑器。重新启动对我有用。我正在使用 VSCode

  • 也对我有用,但要小心,你必须关闭**每个打开的 VSCode 实例**才能使其工作。 (5认同)

Fra*_*sco 9

就我而言,问题与导入的库有关,该库与 Angular v9 不兼容(除其他外,它没有使用指向 Angular Material 和 moment.js 的深层链接)。

我很幸运,因为图书馆是实习生图书馆,我可以修复这些问题并重新发布。之后,它在我的项目方面没有出现任何问题或更改。


Vis*_*man 7

您需要更改模块的自定义构建,因此您需要对以下模块进行模拟更改,在我的情况下,我需要更改:

export class ThemeModule {
  static forRoot(): ModuleWithProviders {
    return <ModuleWithProviders>{
      ngModule: ThemeModule,
      providers: [
        ...NbThemeModule.forRoot(
          {
            name: 'default',
          },
          [DEFAULT_THEME, COSMIC_THEME, CORPORATE_THEME, DARK_THEME],
        ).providers,
      ],
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

到:

export class ThemeModule {
  static forRoot(): ModuleWithProviders<ThemeModule> {
    return {
      ngModule: ThemeModule,
      providers: [
        ...NbThemeModule.forRoot(
          {
            name: 'default',
          },
          [DEFAULT_THEME, COSMIC_THEME, CORPORATE_THEME, DARK_THEME],
        ).providers,
      ],
    };
  }
}
Run Code Online (Sandbox Code Playgroud)