可导出的angular度“ng-cli”模块

我有一个由ng-cli创build的多个Angular应用程序组成的体系结构:

 FrontendLibs @company/ core/ src/ package.json index.ts main-app/ src/ package.json 

在这个例子中,我的两个ng-cli应用程序是CoreHome

我想从Core导出一个模块,比如说SharedLibraryModule ,这样Home就可以使用它。 我正在以当地的NPM包的forms这样做:

 // package.json in main-app { "@company/core": "file:./@company/core/" } 

@company/core模块包含一个用于导出相关模块的index.ts文件:

 // index.ts in @company/core export { SharedLibraryModule } from './src/app/shared-library/shared-library.module'; 

但是,当我在main-app引用SharedLibraryModule并运行ng-serve ,出现以下错误:

遇到错误时遇到静态parsing符号值。 调用函数“makeDecorator”,不支持函数调用。 考虑使用对导出函数的引用replace函数或lambda

以下是main-appapp.module.ts

 import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { HttpModule } from '@angular/http'; import { SharedLibraryModule } from '@company/core'; import { AppComponent } from './app.component'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, FormsModule, HttpModule, SharedLibraryModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { } 

如何通过本地npm包( 或NPM链接 )导出模块,以便在其他Angular应用程序(通过ng-cli创build)中使用它?

我试过的东西:

  • 使用core/自己,而不是@company/core删除范围的软件包
  • 使用AOT构build@company/core – 这需要设置很多configuration来生成相关的.js文件和元数据

此外,上面的工作做了一个微不足道的变化,并保存在源代码重新编译。 只有在最初的编译中,这个失败了。 但是,每次调用ng serve命令时都会发生相同的失败。


编辑

以下是我需要的步骤来实现这个工作:

  1. 构build生产应用程序: ng build --env=prod
  2. 为应用生成.tgz文件: npm pack
  3. package.json直接从消费者处引用.tgz文件: "@company/core": "file:../company-core-0.0.0.tgz"
  4. 观察ng serve构build的成功

注意:

  • 不需要包含自定义的tsconfig-build.json文件或.npmignore文件
  • 不需要在组件装饰器中使用moduleId: module.id
  • npm link将不起作用。 改用npm pack

看看这个github回购 。 我用这个作为模板来构build一个可重用的本地Angular npm库,我在我的移动离子应用程序和我的web应用程序之间共享。 我认为这里的关键是npm链接目前有一个问题,如果你不能将它发布到npm,那么使用npm pack ,然后在yor package.json文件中引用如下的模块。 还要记得在npm包之前运行ngc脚本。

  "my-core-module": "file:../core/my-core-module-1.0.0.tgz", 

我希望这可以帮助你。

要链接或使用npm,您需要创build共享项目的构build。 这可能会帮助你。