2017-02-04 117 views
2

我遇到了在ng2应用程序之间共享模块的问题。这是一个非常简单的场景来演示问题。使用角度cli一路:Angular 2 - 在不同的ng2应用程序之间共享模块

  • 有一个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

这里的百万美元的问题是我如何使这项工作?谢谢。

回答

3

我想说的问题在于这样一个事实:角CLI现在使用AoT Compile为默认值。

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

当您使用CLI创建一个应用程序,它不希望你使用它作为一个共享库,因此,不包括所需要的文件*.metadata.json的AOT编译器需要分析它。

我可以进一步解释,但那里有关于它的介质,在那里我了解了这个伟大的文章:

Getting your Angular 2 Library ready for AoT

希望它可以帮助你。

编辑:

也有当CLI被更新了遇到这个问题了几个角2个库。仅举几个问题可以帮助你:

Tag-Input

Clarity

0

将你的SharedApp公开给github然后公开给npmjs。

在MyApp的

,只是npm install --save your/shared-app,然后在MyApp的

使用SharedApp
1

您现在可以在应用程序的角度之间共享的模块。只要按照this guide on using multiple apps to an angular project,在引导他把两个应用程序在角cli.json并且可以发布&为他们服务seperatly与--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

+0

请在链接中添加上下文,以便您的同伴用户可以了解它是什么以及它为什么在那里。如果目标网站无法访问或永久离线,请始终引用重要链接中最相关的部分。 (引自[回复]) –

+1

对不起,我的坏!我稍微扩展了我的答案。 – JulianSim