iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
  • 外部依賴項

    來自npm可讓您利用生態系統中有價值的程式碼更快地建立應用程式和程式庫。

  • 內部相依性

    可讓您在儲存庫中共用功能,從而顯著提高共用程式碼的可發現性和可用性。我們將在下

    中討論如何建立內部套件。

// ./apps/web/package.json
{
  "dependencies": {
    "next": "latest", // External dependency
    "@repo/ui": "workspace:*" // Internal dependency
  }
}

在使用它們的地方安裝依賴項

當你需要在你的專案中引入新的依賴時,應該直接在使用這些依賴的具體包中進行安裝。這意味著每個包的 package.json 文件中應該列出該包所需的所有依賴,無論是外部的還是內部的。

例如,如果你在開發一個使用了多個子包的大型專案(如 Monorepo),每個子包應該獨立管理自己的依賴。這樣做有幾個好處:

  • 清晰性提升:當每個包的依賴都清晰列在自己的 package.json 中時,開發者可以一目了然地知道這個包依賴了哪些外部模塊。
  • 增強靈活性:在一個大規模的 Monorepo 中,不同的團隊可能需要在不同的時間點更新相同的依賴到不同的版本,以滿足各自的開發需求。
  • 更好的緩存能力:如果在仓库的根目录中安装了太多依赖,每次添加、更新或删除依赖时都会改变工作区的根目录,这可能导致不必要的缓存失效。
  • 修剪未使用的依賴:對於使用 Docker 的用戶,像 Turborepo 這樣的工具能夠在 Docker 映像中移除未使用的依賴,從而創建更輕量的映像。

使用pnpm管理器快速安裝依賴

你可以使用如下包管理器命令在多個包中安裝依賴:

pnpm install jest --save-dev --recursive --filter=web --filter=@repo/ui --filter=@repo/web

補充:

如果你的項目是一個由多個包組成的 Monorepo,使用 --recursive 選項可以確保在所有子包中統一地添加或更新依賴。例如,如果你希望在所有包中安裝或更新 jest 作為開發依賴,你可以在項目的根目錄執行以下命令:
pnpm install jest --save-dev --recursive 這個命令將遍歷項目中的每個包,並嘗試在每個包的 package.json 中添加或更新 jest。

好處

  • 統一性: 確保所有包中的依賴保持同步。
  • 便利性: 一條命令解決所有包的依賴問題,無需單獨進入每個包目錄執行安裝。
  • 節省時間: 對於大型項目,這種遞歸安裝方式比手動進入每個包進行安裝快得多。

管理依賴的位置

依據你選擇的包管理器、版本、設置以及依賴安裝的位置,你可能會在工作空間的不同位置看到 node_modules 和其中的依賴。它們可能位於根目錄的 node_modules,也可能位於各個包的 node_modules,甚至是兩者都有。

直接引用 node_modules 的注意事項

直接引用 node_modules 路徑(例如 node ./node_modules/a-package/dist/index.js)可能不太可靠,因為依賴的實際位置可能會隨著其他依賴的變更而變化。

保持依賴版本一致

如果你希望在所有包中保持依賴的版本一致,可以使用專門的工具(如 syncpack、manypkg 或 sherif),或者使用你的包管理器更新所有包中的依賴版本。例如:

# 使用 pnpm 更新所有包中的 TypeScript 至最新版本
pnpm up --recursive typescript@latest

上一篇
TurboRepo專案安裝與基礎架構-2
下一篇
那我們如何避免重複打包嗎
系列文
讓我們一起與turboRepo共舞30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言