【问题标题】:Why can't I build an Angular app that references an internal Angular library?为什么我不能构建引用内部 Angular 库的 Angular 应用程序?
【发布时间】:2020-03-18 16:43:57
【问题描述】:

tl;dr; ng build 删除包含我编译的自定义库的 /dist 文件夹。这会使我的项目代码中对该库的所有引用无效,从而导致ng build 最终失败。我做错了什么?

我已按照documentation 和guides 在现有项目中使用 Angular CLI 生成库。我跑了ng build @mylib,然后跑了npm install dist/@mylib。我的应用程序中的一两个模块从 @mylib 导入组件,就像从任何 npm 安装的模块 (import { MyLibComponent } from '@mylib';) 一样包含已编译的@mylib。

您可能认为 /node_modules 会包含已编译的文件,但实际上它只是使用到有问题的 /dist 文件夹的虚拟链接。

【问题讨论】:

  • 为什么不在/dist 文件夹上运行npm install 之前移动它?
  • @Woohoojin 要求其他开发人员在全新安装应用程序时做很多事情,不是吗?
  • 哈哈什么? ng build -op another_folder/

标签: angular npm angular-cli node-modules


【解决方案1】:

库的输出路径应位于dist 文件夹中与应用程序输出不同的文件夹中。

我为此创建了一个示例,您可以在以下 repo 中找到它: 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/*"
  ]
}

这样库输出不会被删除,它会直接包含在您的应用程序中。

【讨论】:

  • 这有点像我想的可能是必要的。我原以为 CLI 会足够聪明,可以自己做这样的事情。当你让它生成一个库时,它会自动在你的项目中创建一个项目文件夹。它还将相关配置添加到 angular.json 文件中。这就是为什么它将库构建的输出放在应用程序的构建过程会删除它的地方令人惊讶的原因
  • 您的应用程序的文件夹结构揭示了我的问题。由于我将库添加到现有应用程序中,因此我的结构以项目文件夹之外的应用程序代码为特色,而该文件夹中只有 lib 代码。这就是应用程序上的 ng build 删除整个 /dist 文件夹并清除 lib 的输出文件的原因。
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2018-02-09
  • 1970-01-01
相关资源
最近更新 更多