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

标签 angular angular-cli

我在 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... 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

这里的百万美元问题是我怎样才能让它发挥作用?谢谢。

最佳答案

我会说问题在于 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

关于Angular 2 - 在不同的 ng2 应用程序之间共享一个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42041156/

相关文章:

node.js - 无法升级 Node ,因此无法在 ubuntu16.04LTS 上安装 npm 和 @angular/cli

unit-testing - 如何设置 karma/jasmine 与 ionic2 一起工作?

typescript - 如何隐藏和替换 Angular2 中的组件

angular - 如何将 git 修订包含到 angular-cli 应用程序中?

angular - 在 Visual Studio 的测试资源管理器中发现 Protractor/jasmine 测试?

angular - 如何在 Angular 4 cli 项目中导入 ionicons (sass)

angular - angular cli中的接口(interface)类型格式是什么?

arrays - Angular2,数据也保持绑定(bind)到函数内部的原始变量

javascript - 如何将 getter 值绑定(bind)到 HTML 中?

Angular:ngif动画跳转!从 DOM 中删除前一个元素后如何为 ngif 元素设置动画?