跳到主要內容

清單 (package.json)

清單檔案(也稱為 package.json,因為它們的名稱)包含描述特定套件的唯一設定所需的一切。如果專案使用工作區功能,則專案將包含多個此類清單,因為每個工作區都是透過自己的清單來描述。請注意,這些欄位的預設值可透過 initFields 設定來設定。

name

套件名稱。

用於在應用程式中識別它,特別是在多個工作區之間。名稱的第一部分(這裡是 @scope/)是選用的,並用作名稱空間)。

name: "@scope/name",

version

套件版本。

通常不會對專案有任何影響,除非它是工作區 - 然後其版本必須與指定範圍相符,才能選擇工作區作為解析候選。

version: "1.2.3",

packageManager

定義在處理此專案時應使用的套件管理員。

此欄位由 Corepack 和類似工具使用,用於偵測專案中使用的 Yarn 版本,在某種意義上,它與鎖定檔有相同目的,但僅適用於 Yarn 本身。

執行 `yarn set version` 時,Yarn 會自動設定此值。

packageManager: "yarn@4.0.0",

type

定義如何詮釋 .js 檔案。

Node.js v13.x 選項。可能的值為 commonjs(預設值)和 module。Yarn 3+ 在使用 PnP 時會產生 .pnp.cjs 檔案,而與此選項無關。

type: "commonjs" | "module",

private

定義套件是否要發布。

如果為 true,則套件會被視為私人套件,而 Yarn 會拒絕發布它,無論情況如何。

private: true,

license

SPDX 識別碼,定義套件發布的授權條款。

license: "MIT",

os

此套件可運作的平台組。

安裝時,會將 process.platform() 的值與此組進行比對。如果找不到任何符合的項目,套件定義的任何安裝後指令碼都會被略過。如果套件僅透過 optionalDependencies 項目依賴,則套件根本不會被安裝。

os: [
"linux",
"darwin",
"win32",
],

cpu

此套件可運作的 CPU 架構組。

安裝時,會將 process.arch() 的值與此組進行比對。如果找不到任何符合的項目,套件定義的任何安裝後指令碼都會被略過。如果套件僅透過 optionalDependencies 項目依賴,則套件根本不會被安裝。

cpu: [
"x64",
"ia32",
"arm64",
],

libc

此套件依賴的 C 標準函式庫集。

安裝時會將主機標準函式庫與此集進行比較。如果找不到任何相符項,套件定義的任何安裝後指令碼都將略過。如果套件完全透過 optionalDependencies 項目依賴,則根本不會安裝套件。

libc: [
"glibc",
"musl",
],

main

透過空識別碼需要套件時,應解析的檔案路徑。

此欄位可以在發佈時透過使用 publishConfig.main 欄位進行修改。

main: "./sources/index.js",

module

在 ES6 相容的套件環境中,透過空識別碼需要套件時,應解析的檔案路徑。

此欄位應視為已棄用,其官方替代方案為 exports

module: "./sources/index.mjs",

languageName

安裝相依項時,選擇要使用的連結器的任意值。

這是內部套件設定,除非您真的知道自己在做什麼,否則不應變更。

languageName: "node",

bin

透過 yarn run bin-name 和 shell 環境公開的檔案集。

如果設定為字串,二進位值將會是套件名稱(不包括範圍部分)。

bin: {
my-bin: "./dist/my-bin.js",
},

腳本

透過 yarn run script-name 或作為生命週期掛鉤公開的腳本組。

Yarn 中的腳本是由 POSIX 類似殼層執行的,它實作了您會想在一行腳本中使用的多數功能。例如,您可以使用 POSIX 語法指定環境變數,而 Yarn 將會讓它在 Linux、OSX 和 Windows 上都能運作。

test: "NODE_OPTIONS='--max-old-space-size=2048' jest",
build: "webpack-cli --config ./webpack.config.js",
count-words: "echo \"$@\" | wc -w",
},

相依性

相依性組,必須提供給目前套件才能正常運作。

請參閱 通訊協定文件 以取得更多資訊。

webpack: "^5.0.0",
},

optionalDependencies

相依性組,Yarn 僅應在 os/cpu/libc 欄位與主機平台相符時嘗試安裝。

與一般相依性不同,列在 optionalDependencies 中的相依性允許有失敗的 postinstall 步驟 - 事實上,如果 os/cpu/libc 篩選器不涵蓋主機平台,它們甚至不會被安裝。

請注意,optionalDependencies 僅關注套件是否應安裝/建置 - 它仍應可解析,否則無法得知無法擷取套件元資料是故意的還是無意的。

fsevents "^5.0.0",
},

devDependencies

一組相依性,必須提供給目前的套件,才能適當地作為工作區運作。

與一般相依性不同,列在 devDependencies 中的相依性只會在套件作為工作區專案一部分安裝時需要,通常是透過複製專案存放庫,然後在其中執行 yarn install

webpack "^5.0.0",
},

peerDependencies

一組相依性,套件必須從相依性樹中的祖先繼承。

同儕相依性的語意保證,當套件需要相依性時,它會傳回與套件祖先會傳回的完全相同的物件實例。此機制使同儕相依性成為跨多個套件共用單例狀態的最佳方式。

作為延伸,Yarn 支援「具有預設值的同儕相依性」:同時列在 dependenciespeerDependencies 欄位中的相依性會先嘗試解決同儕相依性,但如果無法滿足,則會回退到一般相依性。

react "*",
react-dom "*",
},

workspaces

陣列資料夾 glob 模式,參考專案的工作區。

工作區是單一存放庫使用的選用功能,用於將大型專案分割成半獨立的子專案,每個子專案都列出自己的相依性組。workspaces 欄位是 glob 模式的清單,符合所有目錄,這些目錄應成為應用程式的子工作區。請參閱 工作區文件 以取得更多資訊。

"packages/*",
],

dependenciesMeta

影響 dependenciesdevDependencies 欄位解譯方式的額外設定。

在工作區專案的脈絡中,這些設定大多會影響所有工作區,因此必須在專案的根目錄中指定。除非另有註明,否則如果在工作區中找到 dependenciesMeta 欄位,將會被忽略。

dependenciesMeta.built

定義是否要執行安裝後腳本。

如果為 false,則永遠不會建置套件(拒絕清單)。當 yarnrc 設定 enableScripts 關閉時,此行為會反轉 - 當發生這種情況時,只有將 built 明確設定為 true 的套件才會被建置(允許清單);至於將 built 明確設定為 false 的套件,其建置腳本警告只會降級為簡單的通知。

built: false,

dependenciesMeta.optional

定義相依性是否為選用。

dependenciesMeta 中的大多數其他設定不同,optional 允許在相依性樹狀結構中的任何位置。它與 optionalDependencies 有完全相同的效應 - 事實上,這就是 optionalDependencies 內部編譯的內容。

optional: false,

dependenciesMeta.unplugged

定義套件是否必須拔除。

如果為 true,則指定的套件將在安裝時自動拔除。這只應適用於包含非 JavaScript 語言中腳本的套件(例如 nan 包含 C++ 標頭)。

unplugged: true,
},
},

peerDependenciesMeta

影響 peerDependencies 欄位解譯方式的額外設定。

dependenciesMeta 不同,peerDependenciesMeta 允許在依賴樹的任何部分中使用。

peerDependenciesMeta.optional

定義當無法滿足對等依賴項時是否記錄警告。

如果為 true,則套件管理員將把所選的對等依賴項標記為可選,並取消我們發出的任何警告。

optional: true,
},
},

resolutions

覆寫特定依賴項的解析度。

此欄位允許您指示 Yarn 使用特定解析度(特定套件版本),而不是解析器通常會選擇的任何內容。這對於強制所有套件使用單一版本的依賴項或回溯修正很有用。解析度金鑰的語法接受一個層級的特殊性,因此以下所有範例都是正確的。

注意:當路徑是相對路徑時,例如可以使用 file:portal: 協定,則會相對於專案的路徑解析。

注意:resolutions 欄位只能設定在專案的根目錄,如果在任何其他工作區使用,將會產生警告。

relay-compiler: "3.0.0",
},

preferUnplugged

定義套件是否必須拔除。

當 Yarn 嘗試直接從其 zip 檔案中參照並載入套件時,可能無法總是執行。啟發法會嘗試偵測會導致 zip 載入有問題的情況,並改為解壓縮磁碟上的檔案,但由於只是啟發法,因此可能會回報不正確的結果。

preferUnplugged 欄位讓您可以自行定義,作為套件作者,您的套件在儲存為檔案時是否可正常運作。如果設定,它將覆寫預設啟發法。

files

將包含在已發布 tarball 中的檔案 glob 模式陣列。

檔案模式遵循類似於 .gitignore 的語法,但相反:包含檔案、目錄或 glob 模式(***/* 等)將使檔案在打包時包含在 tarball 中。省略欄位將使其預設為 ["*"],這表示它將包含所有檔案。

如果缺少此欄位,Yarn 將使用專案的 .gitignore 來產生封裝清單,或使用 .npmignore 檔案(如果可用)。

一些特殊檔案和目錄也會 包含排除,無論它們是否存在於 files 陣列中。

"dist/**/*",
"lib/**/*",
],

publishConfig

影響套件發布方式的額外設定。

publishConfig.access

定義發布套件時要使用的存取權。

有效值為 publicrestricted,但 restricted 通常需要註冊付費方案(這取決於您使用的登錄檔)。

access: "public" | "restricted",

publishConfig.bin

封裝的 tarball 中使用的封裝 bin 欄位的替換,用於取代主欄位。

bin: "./build/bin.js",

publishConfig.browser

封裝的 tarball 中使用的封裝 browser 欄位的替換,用於取代主欄位。

browser: "./build/browser.js",

publishConfig.executableFiles

封裝的 tarball 中必須標記為可執行 (+x) 的檔案組。

"./dist/shim.js",
],

publishConfig.main

封裝的 tarball 中使用的封裝 main 欄位的替換,用於取代主欄位。

main: "./build/index.js",

publishConfig.module

封裝的 tarball 中使用的封裝 module 欄位的替換,用於取代主欄位。

module: "./build/index.mjs",

publishConfig.registry

如果存在,當封裝即將推送到遠端位置時,將取代組態中定義的任何登錄檔。

registry: "https://npm.pkg.github.com",

publishConfig.type

取代套件的 type 欄位,用於已發布的 tarball,取代主要欄位。

type: "./build/index.d.ts",
},

installConfig

影響套件安裝方式的其他設定。

installConfig.hoistingLimits

定義套件可以提升到的最高點。

請參閱 nmHoistingLimits 以取得更多資訊。

hoistingLimits: "workspaces" | "dependencies" | "none",

installConfig.selfReferences

定義工作區是否允許需要自己。

請參閱 nmSelfReferences 以取得更多資訊。

},