gpt4 book ai didi

node.js - 可导出的 Angular "ng-cli"模块

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:00 28 4
gpt4 key购买 nike

我的架构由使用 ng-cli 创建的多个 Angular 应用程序组成:

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

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

我想从 Core 导出一个模块,例如 SharedLibraryModule,以便 Home 可以使用它。我以本地 NPM 包的形式这样做:

// 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 时,出现以下错误:

ERROR in 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

这是 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 创建)中使用它?

我尝试过的事情:

  • 单独使用 core/ 删除作用域包,而不是@company/core
  • 使用 AOT 构建 @company/core - 这是必需的设置大量配置来生成相关的 .js 文件和元数据

此外,在我进行了无关紧要的更改并保存在源代码中的某个位置以重新编译之后,上述内容确实有效。仅在初始编译时才会失败。但是,每次调用 ngserve 命令时都会失败。

<小时/>

编辑

以下是我需要执行的步骤:

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

注意:

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

最佳答案

看看这个 github repo 。我使用它作为模板来构建一个可重用的本地 Angular npm 库,并在我的移动 ionic 应用程序和 Web 应用程序之间共享该库。我认为这里的关键是npm链接当前存在问题,使用npm pack相反,如果您无法将其发布到 npm,然后在您的 package.json 文件中引用该模块,如下所示。另请记住在 npm pack 之前运行 ngc 脚本。

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

希望这对您有帮助。

关于node.js - 可导出的 Angular "ng-cli"模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42723893/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com