可导出的angular度“ng-cli”模块
我有一个由ng-cli
创build的多个Angular应用程序组成的体系结构:
FrontendLibs @company/ core/ src/ package.json index.ts main-app/ src/ package.json
在这个例子中,我的两个ng-cli
应用程序是Core
和Home
。
我想从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-app
的app.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
命令时都会发生相同的失败。
编辑
以下是我需要的步骤来实现这个工作:
- 构build生产应用程序:
ng build --env=prod
- 为应用生成
.tgz
文件:npm pack
- 在
package.json
直接从消费者处引用.tgz
文件:"@company/core": "file:../company-core-0.0.0.tgz"
- 观察
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。 这可能会帮助你。