建立角度lib

时间:2019-04-14 06:39:07

标签: angular ng-packagr

我正在将有角度的应用程序转换为有角度的lib。我生成了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)

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

在角度应用程序中工作正常。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

当我忘记在public-api.ts中导出特定文件时,这发生在我身上。问题文件基本上是模块根,只是从模块中重新导出其他文件。

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

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

答案 2 :(得分:0)

我刚刚用以下文件结构遇到了这个问题:

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 编译器无法处理这个问题并抛出“无法读取未定义的属性‘模块’”错误。

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