【问题标题】:Angular 2 - sharing a module between different ng2 appsAngular 2 - 在不同的 ng2 应用程序之间共享一个模块
【发布时间】:2017-09-21 00:09:13
【问题描述】:

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

  • 有一个 SharedModule 应用,使用 ng new SharedModule 创建。
  • 有一个 MyApp 应用,使用 ng new MyApp 创建。
  • SharedModule 应用程序中的模块导出一个自定义组件(我想在 MyApp 应用程序中使用)。
  • MyApp 中的主模块从 SharedModule 应用导入模块。
  • 当尝试使用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 来演示这个问题。 为了运行它:

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

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

【问题讨论】:

    标签: angular angular-cli


    【解决方案1】:

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

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

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

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

    Getting your Angular 2 Library ready for AoT

    希望对你也有帮助。

    编辑:

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

    Tag-Input

    Clarity

    【讨论】:

      【解决方案2】:

      您现在可以在 Angular 应用之间共享您的模块。只需关注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。

      【讨论】:

      • 请在链接周围添加上下文,以便您的其他用户知道它是什么以及它为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。 (引自How to Answer)
      • 对不起,我的错!我扩大了我的答案。
      猜你喜欢
      • 2017-10-16
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多