angular - Angular Libraries Monorepo:是否可以为每个库使用不同的版本?
问题描述
只是一个简单的问题,我似乎无法找到答案。
我正在尝试构建一个应该能够使用 angular-cli v8 的 monorepo,但仍然能够编译和构建为 v2、v3、v4 等制作的库(主要是组件和服务)。
版本之间发生了很多变化,让我们举个例子:
V5 之前的 Angular 使用@angular/http
.
我们当前的版本(8)使用@angular/common/http
我已经尝试在库的 package.json 中应用特定版本,但它似乎无论如何都不起作用,并且在构建期间(甚至在 IDE 中),它告诉我它找不到@angular/http
,因为它已被弃用从 Angular V5 开始。
有什么方法可以为我们提供我们需要的功能吗?
选择这样一个 monorepo 不是我的选择,所以请避免评论“多么糟糕的模式!”.. 我只是想知道是否有机会让它按我期望的方式工作。
解决方案
可悲的是,答案是否定的。
使用 Angular 源代码时,您与特定版本的 Angular 紧密耦合。因此,GitHub 上的大多数项目都在 Git 中为每个 Angular 版本维护单独的工作分支。
然后,您必须通过 NPM 在本地安装 Angular 的编译链node_modules
并执行构建,npm build
以便使用正确版本的 Angular 来编译该代码,因为您的全局安装的 Angular CLI 可能会跟踪最新的稳定版本。这意味着 Angular CLI for 8 不能用于为 Angular 6 构建项目。
以上主要适用于 Angular 库。因此,如果您为 Angular 7 构建了一个组件库,并且还想支持 Angular 8。您需要为这些版本构建该库的两个分支。
我正在尝试构建一个应该能够使用 angular-cli v8 的 monorepo,但仍然能够编译和构建为 v2、v3、v4 等制作的库(主要是组件和服务)。
这并不重要。您不能在 Angular v8 应用程序中使用 Angular v2 库。Angular 是这里的对等依赖项。所以组件库不会捆绑自己对框架库的依赖。相反,它们被编译以加入拥有应用程序使用的对等依赖项。这意味着,您的所有库都必须使用将要使用的应用程序编译的相同 Angular 版本进行编译。
NPM 将安装因次要版本而异的依赖包。因此 Angular 8.0.0 库将与 Angular 8.9.9 应用程序一起安装,但从技术上讲,如果该库可以与该版本一起使用,那就太好了。在你测试之前你不知道,但是 NPM 不会为使用 9.0.0 的项目安装 8.0.0 对等方的库。实现这一点的唯一方法是更改组件库定义的对等依赖项,但幸运的是与应用程序一起编译它并查看它是否有效。Angular 长期以来一直不与以前的版本完全 API 兼容(例如,路由器最近改变了惰性模块的加载方式)。
我希望这回答了你的问题。我可能在这里跑题了。
推荐阅读
- android - Webview顶部的按钮反应原生
- google-cloud-firestore - 如何使用 Etag 和 Firestore(REST Api) 来检测陈旧数据?
- python - 下拉箭头未显示
- windows - postgres windows没有这样的文件或目录
- r - 数据顺序打乱时glmer在R中的不同结果
- javascript - 我正在使用关卡制作者生成的代码预览关卡制作者,我该怎么做?
- arduino - ESP32 无法连接到 iPhone 个人热点
- java - 我不断收到错误,无法导入我的内部包,所以我可以在我的代码中使用它
- mysql - 错误 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器
- url-rewriting - 分页不适用于分类子类别