只是一个简单的问题,我似乎找不到答案。
我正在尝试构建一个monorepo,它应该能够使用angular-cli v8,但仍然能够编译和构建针对v2,v3,v4等的库(主要是组件和服务)。
版本之间有很多变化,所以让我们举个例子:
V5之前的角度使用@angular/http
。
我们当前的版本(8)使用@angular/common/http
我已经尝试在库的package.json中应用特定版本,但是它似乎仍然无法正常工作,并且在构建期间(甚至在IDE中),它告诉我找不到{{ 1}},因为自Angular V5起不推荐使用。
有没有办法为我们提供所需的功能?
选择这样的monorepo不是我的选择,所以请避免发表有关“什么不好的模式!”的评论。我只想知道是否有机会按我期望的方式使其工作
答案 0 :(得分:2)
遗憾的是,答案是否。
使用Angular源代码时,您会与特定版本的Angular紧密耦合。因此,GitHub上的大多数项目在每个Angular版本的Git中都维护单独的工作分支。
然后必须通过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不会为使用8.0.0的项目的8.0.0的同级安装库。做到这一点的唯一方法是更改组件库定义的对等依赖关系,但是幸运的是可以使用应用程序对其进行编译并查看其是否有效。 Angular具有与以前的版本不完全API兼容的悠久历史(例如,路由器最近更改了延迟模块的加载方式)。
我希望这能回答您的问题。我可能在这里没谈什么。
答案 1 :(得分:2)
@Reactgular 是正确的,因为这是不可能的。但是,其余的并不完全正确。我建议您使用Angular 7构建库。这样,它通常可以与Angular 6-8兼容。如果您不使用rxjs,那么它甚至可以与Angular 4-5一起使用(Angular 6移至rxjs 6并进行了重大更改)。 API的变化并不多,因此这实际上取决于您在框架中使用的功能。