构建 angular 库时无法读取未定义的 属性 'module'

Cannot read property 'module' of undefined while building angular lib

我正在将 angular 应用程序转换为 angular 库。我生成了 angular lib 项目并慢慢移动模块。我现在在构建库时遇到以下错误。

ng build lib

错误

Cannot read property 'module' of undefined
TypeError: Cannot read property 'module' of undefined
    at MetadataBundler.convertSymbol (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:312:61)
    at createReference (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:438:27)
    at MetadataBundler.convertReference (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:486:28)
    at MetadataBundler.convertExpression (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:415:37)
    at C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:364:79
    at Array.map (<anonymous>)
    at MetadataBundler.convertMember (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:364:47)
    at C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:349:70
    at Array.map (<anonymous>)
    at MetadataBundler.convertMembers (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:349:38)

通常,此错误是在尝试在模块中错误地注册依赖项时导致的。我如何找到我的配置的哪一部分出现此异常?

它在 angular 应用程序中运行良好。

如果 angular 决定 aot 编译失败,您可以尝试进入 node_modules\@angular\compiler-cli\src\metadata\bundler.js 并在该文件中进行一些控制台登录。 我将从将 console.log 放入 convertSymbol 函数开始。 那应该为您提供一些有关 angular cli 在进行模块编译之前使用的文件路径的信息。 例如在我的例子中,是从桶中重新导出常量破坏了编译 所以找到 TWO_FA_INITIAL_STATE 的所有用法,并直接导入 TWO_FA_INITIAL_STATE,解决了那个特定问题。

当我忘记导出我的 public-api.ts 中的特定文件时,这发生在我身上。有问题的文件基本上是一个模块根目录,只是模块中的 re-exporting 个其他文件。

当我尝试从所述文件导入符号时,它会给我这个错误(但甚至没有调用堆栈)。

这真的很奇怪,但是将所述文件添加到 public-api.ts 解决了这个问题(我说这很奇怪是因为我一开始并没有从 public-api.ts 导入上述符号)

我刚刚遇到了以下文件结构的问题:

components/component-n/component-n.component.ts
components/index.ts
my-module.ts

其中 components/index.ts 包含:

export { ComponentN } from './component-n/component-n.component.ts';

并且my-module.ts包含:

import { ComponentN } from './components';

@NgModule({
  // ...
  declarations: [
    ComponentN
  ]
})
export class MyModule {}

原来 Angular 编译器无法处理这个问题并抛出“无法读取未定义的 属性 'module'”错误。

my-module.ts 更改为直接从 components/component-n/component-n.component.ts 导入,并删除 index.ts,为我修复了它。