我遇到了在ng2应用之间共享模块的问题。这是一个非常简单的场景来演示这个问题。一直使用angular-cli:
ng new SharedModule
创建的SharedModule应用。ng new MyApp
创建的MyApp应用。ng serve
运行MyApp时,会出现错误:
在静态解析符号值时遇到错误。不支持调用函数&makeDecorator',函数调用。考虑使用对导出函数的引用替换函数或lambda ...
忽略不重要的东西,非常基本的结构如下:
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来证明问题。 为了运行它:
npm install
。npm start
。这里的百万美元问题是我如何才能完成这项工作?感谢。
答案 0 :(得分:3)
我说问题在于Angular CLI现在使用AoT Compile作为默认值。
在这种情况下,您要导入的SharedModule需要能够进行静态分析,以便它可以与MyApp一起构建。
使用CLI创建应用程序时,不希望您将其用作共享库,因此不包含AoT编译器分析所需的*.metadata.json
文件。
我可以进一步解释一下,但是关于它的一篇很棒的文章,我在那里了解到了这一点:
Getting your Angular 2 Library ready for AoT
希望它也能帮到你。
修改强>
更新CLI时,还有一些Angular 2 Libraries遇到此问题。列举一些可能对您有所帮助的问题:
答案 1 :(得分:1)
您现在可以角度分享应用之间的模块。只需按照this guide on using multiple apps to an angular project,在指南中他将两个应用程序放在angular-cli.json中即可发布&用--app标志分开服务他们:
ng serve --app 0
ng build --app 1
或者像这样:
ng serve --app app1
ng build --app app2
我自己测试了一段时间,但一段时间都在努力,因此我自己也提出了一个问题:Share a module between multiple angular apps that resides in the same project。