外部依賴項
來自npm可讓您利用生態系統中有價值的程式碼更快地建立應用程式和程式庫。
內部相依性
可讓您在儲存庫中共用功能,從而顯著提高共用程式碼的可發現性和可用性。我們將在下
中討論如何建立內部套件。
// ./apps/web/package.json
{
"dependencies": {
"next": "latest", // External dependency
"@repo/ui": "workspace:*" // Internal dependency
}
}
當你需要在你的專案中引入新的依賴時,應該直接在使用這些依賴的具體包中進行安裝。這意味著每個包的 package.json
文件中應該列出該包所需的所有依賴,無論是外部的還是內部的。
例如,如果你在開發一個使用了多個子包的大型專案(如 Monorepo),每個子包應該獨立管理自己的依賴。這樣做有幾個好處:
package.json
中時,開發者可以一目了然地知道這個包依賴了哪些外部模塊。你可以使用如下包管理器命令在多個包中安裝依賴:
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