Angular 2 - 在不同的ng2应用之间共享模块

时间:2017-02-04 13:51:54

标签: angular angular-cli

我遇到了在ng2应用之间共享模块的问题。这是一个非常简单的场景来演示这个问题。一直使用angular-cli:

  • 使用ng new SharedModule创建的SharedModule应用。
  • 有一个使用ng new MyApp创建的MyApp应用。
  • SharedModule应用程序中的模块导出自定义组件(我想在MyApp应用程序中使用)。
  • MyApp中的主模块从SharedModule app。
  • 导入模块
  • 尝试使用ng serve运行MyApp时,会出现错误:
      

    在静态解析符号值时遇到错误。不支持调用函数&makeDecorator',函数调用。考虑使用对导出函数的引用替换函数或lambda ...   error

忽略不重要的东西,非常基本的结构如下:

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

这里的百万美元问题是我如何才能完成这项工作?感谢。

2 个答案:

答案 0 :(得分:3)

我说问题在于Angular CLI现在使用AoT Compile作为默认值。

在这种情况下,您要导入的SharedModule需要能够进行静态分析,以便它可以与MyApp一起构建。

使用CLI创建应用程序时,不希望您将其用作共享库,因此不包含AoT编译器分析所需的*.metadata.json文件。

我可以进一步解释一下,但是关于它的一篇很棒的文章,我在那里了解到了这一点:

Getting your Angular 2 Library ready for AoT

希望它也能帮到你。

修改

更新CLI时,还有一些Angular 2 Libraries遇到此问题。列举一些可能对您有所帮助的问题:

Tag-Input

Clarity

答案 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