[英]Angular monorepo dependencies
我構建了一個包含三個庫的 monorepo,lib1、lib2 和 lib3。 后者依賴於 lib1 和 lib2。
我試圖實現的是在 lib3 中本地引用 lib1 和 lib2。
到目前為止,我總是將 lib1 和 lib2 發布到 npm 注冊表,然后安裝它的新版本以便能夠發布最新的 lib3。 所以 package.json 文件看起來像這樣:
包/package.json
{
"name": "packages",
"scripts": {
"build-lib1": "ng build lib1",
"build-lib2": "ng build lib2",
"build-lib3": "ng build lib3"
},
"private": true,
"dependencies": {
"lib1": "1.0.0",
"lib2": "1.0.0",
...
},
"devDependencies": {
...
}
}
包/lib1/package.json
{
"name": "lib1",
"peerDependencies": {
...
},
"dependencies": {
"tslib": "^2.4.0"
}
}
包/lib2/package.json
{
"name": "lib2",
"peerDependencies": {
...
},
"dependencies": {
"tslib": "^2.4.0"
}
}
包/lib3/package.json
{
"name": "lib3",
"peerDependencies": {
...
},
"dependencies": {
"tslib": "^2.4.0",
"lib1": "1.0.0",
"lib2": "1.0.0"
}
}
如您所見,我將 lib1 和 lib2 添加為 lib 3 的依賴項,而不是作為 peerDependency。 這是故意的,因為在另一個應用程序中安裝 lib3 時,應該自動添加 lib1 和 lib2(傳遞依賴項)。 因此,我必須將 lib 和allowedNonPeerDependencies
添加到packages/lib3/ng-package.json
中的 allowedNonPeerDependencies 中。
庫的版本在 CI 管道中設置,並基於存儲庫的 git 標簽。 所以現在發生的情況是 lib1/lib2 和 lib3 有不同的版本。 例如,我為 lib1 和 lib2 發布了 v1.0.0,然后我必須更新項目中的那些依賴項。 所以 lib3 將有例如 v1.0.1。
有關所用版本的其他信息:
所以我想做的是直接在 lib3 中引用 lib1 和 lib2 而不會丟失傳遞依賴行為。
實現此目標的最佳方法是什么? 我已經在打字稿中對 npm 工作區和項目引用進行了一些研究,但我現在被困住了,不知道如何完成。
研究的一種選擇是 nx 工作區 ( https://nx.dev/getting-started/intro )。
應該仍然可以只用角度來解決,但 nx 會解決幾個問題:
另外你得到
如果你走這條路,我推薦 Nx Console(VS Code / webstorm 的擴展)來生成庫等。
電子書Enterprise Angular Monorepo Patterns (強烈推薦)是由圖書館的作者之一制作的,Nx 被 NgRx 圖書館使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.