簡體   English   中英

Angular 庫 Monorepo:是否可以為每個庫使用不同的版本?

[英]Angular Libraries Monorepo: Is it possible to use different versions for every library?

只是一個簡單的問題,我似乎無法找到答案。

我正在嘗試構建一個應該能夠使用 angular-cli v8 的 monorepo,但仍然能夠編譯和構建為 v2、v3、v4 等制作的庫(主要是組件和服務)。

版本之間發生了很多變化,讓我們舉個例子:

V5 之前的 Angular 使用@angular/http

我們當前的版本(8)使用@angular/common/http

我已經嘗試在庫的 package.json 中應用特定版本,但它似乎無論如何都不起作用,並且在構建期間(甚至在 IDE 中),它告訴我它找不到@angular/http ,因為它自 Angular V5 以來已被棄用。

有什么方法可以為我們提供我們需要的功能嗎?

go 不是我為這樣的 monorepo 選擇的,所以請避免評論“多么糟糕的模式”。我只是想知道是否有機會讓它按照我期望的方式工作。

可悲的是,答案是否定的。

使用 Angular 源代碼時,您將緊密耦合到 Angular 的特定版本。 因此,GitHub 上的大多數項目在 Git 中為每個 Angular 版本維護單獨的工作分支。

You have to then install Angular's compiling chain via NPM in the local node_modules and perform builds via npm build so that the correct versions of Angular are used to compile that code, because your global install of Angular CLI will likely be tracking the latest stable release. 這意味着 8 的 Angular CLI 不能用於為 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 與以前的版本兼容(即路由器最近更改了如何加載惰性模塊作為示例)。

我希望這回答了你的問題。 我可能在這里跑題了。

@Reactgular認為這是不可能的。 然而 rest 並不完全正確。 我建議您使用 Angular 7 構建您的庫。這樣它通常與 Angular 6-8 兼容。 如果您不使用 rxjs - 那么它甚至可以與 Angular 4-5 一起使用(Angular 6 移動到 rxjs 6 並且發生了重大變化)。 API 的變化並不多,因此這實際上取決於您從框架中使用的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM