Angular 2 - 在不同的ng2应用程序之间共享模块
我遇到了在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...
省略不重要的东西,非常基本的结构是这样的:
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
。
这里的百万美元的问题是我如何使这项工作?谢谢。
我想说的问题在于这样一个事实:角CLI现在使用AoT Compile为默认值。
既然如此,您导入的SharedModule需要能够进行静态分析,以便它可以与MyApp一起构建。
当您使用CLI创建一个应用程序,它不希望你使用它作为一个共享库,因此,不包括所需要的文件*.metadata.json
的AOT编译器需要分析它。
我可以进一步解释,但那里有关于它的介质,在那里我了解了这个伟大的文章:
Getting your Angular 2 Library ready for AoT
希望它可以帮助你。
编辑:
也有当CLI被更新了遇到这个问题了几个角2个库。仅举几个问题可以帮助你:
将你的SharedApp
公开给github然后公开给npmjs。
,只是npm install --save your/shared-app
,然后在MyApp的
您现在可以在应用程序的角度之间共享的模块。只要按照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。
请在链接中添加上下文,以便您的同伴用户可以了解它是什么以及它为什么在那里。如果目标网站无法访问或永久离线,请始终引用重要链接中最相关的部分。 (引自[回复]) –
对不起,我的坏!我稍微扩展了我的答案。 – JulianSim