依賴關係的種類

一個相依性可能是為了不同的目的而加入你的專案的, 比如有些相依性是為了建構你的專案,其它的則是專案執行時期所需要的, 為此,你的專案將有以下幾種不同的相依性 (例: dependenciesdevDependenciespeerDependencies)。

你的 package.json 將紀錄所有的相依性:

{
  "name": "my-project",
  "dependencies": {
    "package-a": "^1.0.0"
  },
  "devDependencies": {
    "package-b": "^1.2.1"
  },
  "peerDependencies": {
    "package-c": "^2.5.4"
  },
  "optionalDependencies": {
    "package-d": "^3.1.0"
  }
}

大多數情況下只會包含 dependenciesdevDependencies,但它們都很重要,請務必理解。

dependencies

這是最通常的相依性,或是你的專案在執行期所需的 (例:React 或 ImmutableJS)。

devDependencies

這些是在開發時期需要的相依性,當你在開發時你會需要它們,可是執行時並不需要 (例: Babel 或 Flow)。

peerDependencies

Peer dependencies 是一種特殊的相依關係,它們只用於已經發佈的套件。

當有 peer dependency 意謂著你的套件需要使用者自行安裝另一個相依套件, 這對於如 react 這樣需要使用者另外安裝一份 react-dom 的套件而言很有用。

optionalDependencies

可選的相依性就意謂著它是可選的,如果它安裝失敗, Yarn 仍然會說安裝過程成功。

這對於某些無法在所有平台上運作的套件 (例: Watchman) 且你有它無法安裝時的備案時,這功能很有用。

bundledDependencies

這是一個陣列包含會被一起捆綁發佈的套件。

Bundled dependencies 應該被使用在套件內部,這功能基本上與正常的相依性相同,同時它們也會被 yarn pack 指令打包。

正常情況下相依性通常是從 npm 安裝的, Bundled dependencies 在以下情況造成一般的相依性不夠使用時很有用:

  • 當你想要重覆使用一個非來自於 npm 或修改過的第三方的套件
  • 當你想用重覆使用你自己的專案為一個套件
  • 當你想要同時與你的模組一起發佈一些檔案時