为什么我不能构建引用内部 Angular 库的 Angular 应用程序?
Why can't I build an Angular app that references an internal Angular library?
tl;dr; ng build
删除包含我编译的自定义库的 /dist 文件夹。这会使我项目代码中对该库的所有引用无效,从而导致 ng build
最终失败。我做错了什么?
我已经按照 documentation and guides 在现有项目中使用 Angular CLI 生成了一个库。我 运行 ng build @mylib
然后 npm install dist/@mylib
。我的应用程序中的一个或两个模块从 @mylib 导入组件,就像它们从任何 npm 安装的模块导入组件一样(import { MyLibComponent } from '@mylib';
)但是,这些引用在我构建应用程序后立即中断,因为 ng build
删除了 / dist 文件夹,其中包含已编译的 @mylib.
你认为 /node_modules 会包含编译后的文件,但它实际上只是使用虚拟 link 到有问题的 /dist 文件夹。
您的库的输出路径应位于 dist
文件夹中与您的应用程序输出不同的文件夹中。
我为此创建了一个示例,您可以在以下存储库中找到它:
https://github.com/tenkmilan/angular-workspace-example
在上述情况下,angular.json
中的应用程序输出为 "outputPath": "dist/my-app"
,ng-package.json
中的库输出为 "dest": "../../dist/my-lib"
。要将您的库输出源包含在您的应用程序中,需要在工作空间的根 tsconfig.json
中进行以下配置:
"paths": {
"my-lib": [
"dist/my-lib"
],
"my-lib/*": [
"dist/my-lib/*"
]
}
这样库输出不会被删除,它会直接包含在您的应用程序中。
tl;dr; ng build
删除包含我编译的自定义库的 /dist 文件夹。这会使我项目代码中对该库的所有引用无效,从而导致 ng build
最终失败。我做错了什么?
我已经按照 documentation and guides 在现有项目中使用 Angular CLI 生成了一个库。我 运行 ng build @mylib
然后 npm install dist/@mylib
。我的应用程序中的一个或两个模块从 @mylib 导入组件,就像它们从任何 npm 安装的模块导入组件一样(import { MyLibComponent } from '@mylib';
)但是,这些引用在我构建应用程序后立即中断,因为 ng build
删除了 / dist 文件夹,其中包含已编译的 @mylib.
你认为 /node_modules 会包含编译后的文件,但它实际上只是使用虚拟 link 到有问题的 /dist 文件夹。
您的库的输出路径应位于 dist
文件夹中与您的应用程序输出不同的文件夹中。
我为此创建了一个示例,您可以在以下存储库中找到它: https://github.com/tenkmilan/angular-workspace-example
在上述情况下,angular.json
中的应用程序输出为 "outputPath": "dist/my-app"
,ng-package.json
中的库输出为 "dest": "../../dist/my-lib"
。要将您的库输出源包含在您的应用程序中,需要在工作空间的根 tsconfig.json
中进行以下配置:
"paths": {
"my-lib": [
"dist/my-lib"
],
"my-lib/*": [
"dist/my-lib/*"
]
}
这样库输出不会被删除,它会直接包含在您的应用程序中。