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

rip*_*nas 5 angular-cli angular

我在ng2应用之间共享模块时遇到问题。这是一个非常简单的方案来演示该问题。一路使用angular-cli:

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

    静态解析符号值时遇到错误。调用函数“ 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
    ??
Run Code Online (Sandbox Code Playgroud)

这里的关键是MyApp和SharedModule是两个不同的应用程序。如果我尝试将共享模块放入MyApp中(以及导出的自定义组件中),那么它就可以正常工作。不幸的是,目前这不是一个选择,我必须将模块/应用程序分开。也不能从SharedModule创建一个npm软件包并将其安装到MyApp中。

我创建了一个github存储库来演示该问题。为了运行它:

  • npm install在MyApp和SharedModule文件夹中运行。
  • npm start在MyApp文件夹中运行。

百万美元的问题是我该如何进行这项工作?谢谢。

jsf*_*cha 3

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

既然如此,您导入的 SharedModule 需要能够进行静态分析,以便它可以与您的 MyApp 一起构建。

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

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

让您的 Angular 2 库为 AoT 做好准备

希望它也能帮助你。

编辑:

更新 CLI 时,还有几个 Angular 2 库遇到了此问题。举几个可能对您有帮助的问题:

标签输入

明晰