相互引用的 Angular 库辅助入口点,通过 npm 链接使用

问题描述 投票:0回答:1

我找到的所有在 Angular 中开发库的示例始终将库与应用程序放在同一工作区中,但我不能这样做。

我有三个不同的 Angular 18 工作区,一个用于库 A,一个用于使用库 A 的库 B,另一个用于通过 npm 链接使用这两个库的应用程序。

这是一般结构:

ws2
└── src/
    └── app/
        └── component.ts

ws2
└── projects/
    └── libraryA/
        └── featureA1/
            ├── ...
            ├── index.ts
            ├── ng-package.json
            └── public-api.ts
        └── featureA2/
            ├── ...
            ├── index.ts
            ├── ng-package.json
            └── public-api.ts

ws3
└── projects/
    └── libraryB/
        └── featureB1/
            ├── ...
            ├── index.ts
            ├── ng-package.json
            └── public-api.ts

我一直在关注“构建具有多个入口点的 Angular 库”。

图书馆只有辅助入口点。一些入口点导入其他入口点。

因此,对于libraryA中的featureA1要使用libraryA中的featureA2,导入如下所示:

import { ... } from 'libraryA/featureA2'; 
在 tsconfig.json 中的libraryA路径中我已经包含了

"paths": {
   "libraryA": ["./projects/libraryA"],
   "libraryA/*": ["./projects/libraryA/*"],
}

libraryB 通过 npm 链接使用libraryA,libraryB 中组件的导入如下所示:

import { ... } from 'libraryA/featureA1';

构建库B时,编译器会出现错误:

error TS2307: Cannot find module 'libraryA/featureA1' or its corresponding type declarations.

指向libraryA的dist文件夹中的文件(“../libraryA/dist/libraryA/featureA1/...”),其中包含

import { ... } from 'libraryA/featureA1';

我尝试在libraryB的tsconfig.json中包含另一个路径映射,以便为编译器提供提示在哪里可以找到“libraryA”

"paths": {
      "libraryB": ["./projects/libraryB"],
      "libraryB/*": ["./projects/libraryB/*"],
      "libraryA": ["./node_modules/libraryA"],
      "libraryA/*": ["./node_modules/libraryA/*"],
}

然后libraryB 构建得很好,但随后必须在应用程序的tsconfig.json 中包含libraryA 和libraryB(指向node_modules)的类型映射。然后应用程序会构建,但 Angular 在 ng serve 上抛出错误

NG0203

如何在同一库中的另一个辅助入口点中引用辅助入口点,然后通过 npm 链接在另一个工作区的项目中使用该库?

angular typescript angular-library ng-packagr
1个回答
0
投票

确保在 angular.json 中为所有使用链接的项目设置了

"preserveSymlinks": true

  "architect": {
    "build": {
      "builder": "@angular-devkit/build-angular:browser",
      "options": {
        ...
        "preserveSymlinks": true,

本教程非常适合使用链接包。

如何本地开发 Angular 库?

我认为指向 dist 文件夹会导致

NG0203
,这基本上意味着,您拥有的服务不被视为角度服务,而是 javascript 类。

© www.soinside.com 2019 - 2024. All rights reserved.