Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular Libraries Monorepo:是否可以为每个库使用不同的版本?_Angular_Angular Cli_Monorepo - Fatal编程技术网

Angular Libraries Monorepo:是否可以为每个库使用不同的版本?

Angular Libraries Monorepo:是否可以为每个库使用不同的版本?,angular,angular-cli,monorepo,Angular,Angular Cli,Monorepo,只是一个简单的问题,我似乎找不到答案 我正在尝试构建一个monorepo,它应该能够使用angular cli v8,但仍然能够编译和构建为v2、v3、v4等制作的库(主要是组件和服务) 在不同版本之间,很多事情都发生了变化,因此让我们举一个例子: V5之前的Angular使用@Angular/http 我们当前的版本(8)使用@angular/common/http 我已经尝试在库的package.json中应用特定版本,但它似乎无论如何都不起作用,而且在构建期间(甚至在IDE中),它告诉我它

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

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

在不同版本之间,很多事情都发生了变化,因此让我们举一个例子:

V5之前的Angular使用
@Angular/http

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

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

是否有任何可能的方式为我们提供所需的功能


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

遗憾的是,答案是否定的

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

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

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

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

这并不重要。您不能在Angular v8应用程序中使用Angular v2库。角度是这里的对等关系。因此,组件库不会绑定它们自己对框架库的依赖关系。相反,它们被编译以加入所属应用程序使用的对等依赖项。这意味着,所有库都必须使用将使用的应用程序编译的相同版本进行编译

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


我希望这能回答你的问题。我可能有点离题了。

@Reactgular关于这不可能是正确的。然而,其余部分并不完全正确。我建议你用Angular 7建立你的图书馆。这样,它通常与角度6-8兼容。如果您不使用rxjs,那么它甚至可以与Angular 4-5配合使用(Angular 6移动到rxjs 6,出现了突破性的变化)。API没有太多变化,因此这实际上取决于您在框架中使用的内容。

据我所知,答案是将所有单个软件包升级到cli-v8级别并打包,或者另一种方法是npm将所有不同版本的软件包作为npm模块安装到您的项目中,请放心,我就是这么想的。它只是证实了我的观点,谢谢你的解释。但是,下一个版本我可能会遇到麻烦。正如之前对@Reactgular所说的,这证实了我的想法。非常感谢。