簡體   English   中英

Angular 單體倉庫依賴

[英]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。

有關所用版本的其他信息:

  • 角度 15
  • 打字稿 4.8.3
  • npm 9.2.0

所以我想做的是直接在 lib3 中引用 lib1 和 lib2 而不會丟失傳遞依賴行為。

實現此目標的最佳方法是什么? 我已經在打字稿中對 npm 工作區和項目引用進行了一些研究,但我現在被困住了,不知道如何完成。

研究的一種選擇是 nx 工作區 ( https://nx.dev/getting-started/intro )。

應該仍然可以只用角度來解決,但 nx 會解決幾個問題:

  • 本地庫引用
  • 庫可以構建
  • 開箱即用的 lib 依賴關系
  • 無需等待式構建腳本

另外你得到

  • lib 依賴關系的圖形可視化
  • 緩存常見任務,如構建、lint 等。

如果你走這條路,我推薦 Nx Console(VS Code / webstorm 的擴展)來生成庫等。

電子書Enterprise Angular Monorepo Patterns (強烈推薦)是由圖書館的作者之一制作的,Nx 被 NgRx 圖書館使用。

暫無
暫無

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

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