我在 ng2 应用程序之间共享模块时遇到问题。这是一个非常简单的场景来演示问题。一路使用angular-cli:
- 有一个 SharedModule 应用,使用
ng new SharedModule
创建。 - 有一个 MyApp 应用,使用
ng new MyApp
创建。 - SharedModule 应用程序中的模块导出一个自定义组件(我想在 MyApp 应用程序中使用)。
- MyApp 中的主模块从 SharedModule 应用导入模块。
- 当尝试使用
ng serve
运行 MyApp 时,出现错误:Error encountered resolving symbol values statically. Calling function 'makeDecorator', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function...
省略不重要的东西,最基本的结构如下所示:
MyApp
|────angular-cli.json
|────package.json
|
└──src
└─app
|────app.module.ts
|────app-root.component.ts
└─
SharedModule
|────angular-cli.json
|────package.json
|
└─src
└─app
|────app-root.component.ts
|────custom-input.component.ts
|────shared.module.ts
└─
这里的关键点是 MyApp 和 SharedModule 是两个不同的应用程序。如果我尝试将共享模块放入 MyApp(连同导出的自定义组件),那么它就可以正常工作。不幸的是,目前这不是一个选项,我必须将模块/应用程序分开。从 SharedModule 创建一个 npm 包并将其安装到 MyApp 中也不是一种选择。
我创建了一个 github repository证明问题。 为了运行它:
- 在 MyApp 和 SharedModule 文件夹中运行
npm install
。 - 在 MyApp 文件夹中运行
npm start
。
这里的百万美元问题是我怎样才能让它发挥作用?谢谢。
最佳答案
我会说问题在于 Angular CLI 现在使用 AoT Compile 的事实默认。
既然如此,您导入的 SharedModule 需要能够进行静态分析,以便它可以与您的 MyApp 一起构建。
当您使用 CLI 创建应用程序时,它不希望您将其用作共享库,因此不包括 AoT 编译器所需的 *.metadata.json
文件需要对其进行分析。
我可以进一步解释它,但是在 Medium 上有一篇关于它的很棒的文章,我是从那里了解到的:
Getting your Angular 2 Library ready for AoT
希望对你也有帮助。
编辑:
还有几个 Angular 2 库在更新 CLI 时遇到了这个问题。列举几个可能对您有帮助的问题:
关于Angular 2 - 在不同的 ng2 应用程序之间共享一个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42041156/