我也有同样的问题。创建了一个库并尝试在多个项目中使用它。首先确保您的库已添加到主 tsconfig.json -> 路径属性中。
"paths": {
"@projectName/LibraryName1": ["libs/LibraryName1/src/index.ts"],
"@projectName/LibraryName2": ["libs/LibraryName2/src/index.ts"],
....
}
然后,您必须将项目添加到主 angular.json 文件中。
"projects": {
"LibraryName1": {
"root": "libs/LibraryName1",
"sourceRoot": "libs/LibraryName1/src",
"projectType": "library",
"prefix": "projectName",
"projectType": "library"
...
}
}
然后显然检查 tsconfig.json 文件以查找您要在其中使用 lib 的应用程序。关键是删除路径属性。因为您已经在 main tsconfig.json 中添加了(在我的情况下,我使用了 nrwl(一种管理多个应用程序的技术))。
现在您应该能够像这样引用您的任何 lib 项目:
import { class1,class2 } from '@projectName/libraryName1';
不要忘记使用 index.ts 导出您的类(假设您有模型库),如下所示:
export * from './lib/class1';
export * from './lib/class2';
或者,如果您有任何具有组件的 UI 库。您应该创建一个模块,在其中添加这些组件,然后使用 index.ts 将其导出。模块文件应该在 lib 文件夹中。例如
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NumberOnlyDirective } from './directives/number-only.directive';
@NgModule({
imports: [CommonModule],
declarations: [NumberOnlyDirective],
exports: [NumberOnlyDirective]
})
export class UiModule {}
UI 库的 index.ts 文件
export * from './lib/ui.module';
在您的项目 app.module.ts 中添加 UI 模块的引用
import { UiModule } from '@projectName/LibraryName1';
在进口也
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpClientModule,
NgxPaginationModule,
Ng2OrderModule,
Ng2SearchPipeModule,
AngularEditorModule,
RichTextEditorAllModule,
NgxPrintModule,
DevExpressModule,
UiModule
...
],