【问题标题】:Angular Libraries Monorepo: Is it possible to use different versions for every library?Angular Libraries Monorepo:是否可以为每个库使用不同的版本?
【发布时间】:2020-03-17 11:09:50
【问题描述】:

只是一个简单的问题,我似乎找不到答案。

我正在尝试构建一个 monorepo,它应该能够使用 angular-cli v8,但仍然能够编译和构建为 v2、v3、v4 等制作的库(主要是组件和服务)。

版本之间有很多变化,我们举个例子:

V5 之前的 Angular 使用 @angular/http

我们当前的版本(8)使用@angular/common/http

我已经尝试在库的 package.json 中应用特定版本,但它似乎无论如何都不起作用,并且在构建期间(甚至在 IDE 中),它告诉我找不到 @987654323 @,因为它自 Angular V5 以来已被弃用。

有什么方法可以为我们提供我们需要的功能吗?

我不是选择这样一个 monorepo,所以请避免 cmets 关于“多么糟糕的模式!”.. 我只是想知道是否有机会让它按照我期望的方式工作.

【问题讨论】:

  • 据我所知,答案是将所有单独的包升级到 cli-v8 级别并将它们捆绑在一起,或者另一种方法是 npm 将不同版本的所有包安装为 npm模块到你的项目中,webpack 放心...

标签: angular angular-cli monorepo


【解决方案1】:

很遗憾,答案是否定的。

使用 Angular 源代码时,您与特定版本的 Angular 紧密耦合。所以 GitHub 上的大多数项目都在 Git 中为每个 Angular 版本维护单独的工作分支。

然后您必须通过 NPM 在本地 node_modules 中安装 Angular 的编译链并通过 npm build 执行构建,以便使用正确版本的 Angular 来编译该代码,因为您的 Angular CLI 的全局安装可能是跟踪最新的稳定版本。这意味着 Angular CLI for 8 不能用于为 Angular 6 构建项目。

以上内容主要适用于 Angular 库。因此,如果您为 Angular 7 构建了一个组件库,并且还想支持 Angular 8。您需要该库的两个分支来为这些版本构建。

我正在尝试构建一个 monorepo,它应该能够使用 angular-cli v8,但仍然能够编译和构建为 v2、v3、v4 等制作的库(主要是组件和服务)。

这并不重要。您不能在 Angular v8 应用程序中使用 Angular v2 库。 Angular 是这里的 peer 依赖项。所以组件库不会捆绑它们自己对框架库的依赖。相反,它们被编译为 join 拥有应用程序使用的对等依赖项。这意味着,您的所有库都必须使用将要使用的应用程序编译的相同 Angular 版本进行编译。

NPM 将安装 依赖包,这些依赖包因次要 版本而不同。因此 Angular 8.0.0 库将与 Angular 8.9.9 应用程序一起安装,但技术上如果该库与该版本一起使用,那就太好了。在你测试之前你不知道,但是 NPM 不会为使用 9.0.0 的项目安装 8.0.0 的对等库。实现这一点的唯一方法是更改​​组件库定义的对等依赖项,但幸运的是与应用程序一起编译它并查看它是否有效。 Angular 长期以来一直不与以前的版本完全 API 兼容(例如,路由器最近改变了惰性模块的加载方式)。

我希望这能回答您的问题。我可能在这里跑题了。

【讨论】:

  • 我就是这么想的。它只是证实了我的观点,谢谢你的解释。
【解决方案2】:

@Reactgular 认为这是不可能的。然而,其余的并不完全正确。我建议你使用 Angular 7 构建你的库。这样它通常会与 Angular 6-8 兼容。如果您不使用 rxjs——那么它甚至可以与 Angular 4-5 一起使用(Angular 6 移至 rxjs 6 并且发生了重大变化)。 API 并没有多少变化,因此这实际上取决于您从框架中使用什么。

【讨论】:

  • 但是,下一个版本我可能会遇到麻烦。正如已经对@Reactgular 所说的那样,它只是证实了我的想法。谢谢。
猜你喜欢
  • 2021-03-11
  • 2017-12-30
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多