跳至主要內容

腳本

環境檔案

Yarn 會自動詮釋 .env.yarn 檔案的內容,並將其注入 yarn run 執行的所有指令中。此行為可透過使用 injectEnvironmentFiles 設定進行設定。

請注意,您也可以設定將載入的檔案,但僅在存在時;這使得可以撰寫條件式匯入,例如

injectEnvironmentFiles:
- .env.yarn
- .env.local?

其中 .env.local 僅在存在時才會優先,否則會忽略。

平行工作

Yarn 有一個原生整合的背景工作語法(foo&),在 scripts 欄位中定義的腳本內。它會平行執行這些腳本,而輸出的每一行都會加上一個識別碼,顯示它們來自何處。例如,以下命令會平行執行 linting 和測試,並在兩者都完成後回報

$ yarn lint & yarn test

可攜式 shell

使用其他套件管理員時,Windows 的可攜性可能會造成麻煩。腳本無法預期可以使用 Posix shell,因此你必須依賴奇怪的技巧來使用半可攜式腳本,或乾脆放棄它們,改用 Node.js 腳本,這會違背原本小型、不具侵入性的腳本的宗旨。不過,如果你使用 Yarn 就不用這樣!

Yarn 實作並維護一個類 Posix 的 shell 解譯器,支援你通常在腳本中找到的所有語法,以及一些簡單的內建函式,例如 cd / echo。例如,以下命令在 Windows 和 Linux 上都能正常運作,即使它會指定環境變數

$ NODE_ENV=production webpack
資訊

我們稱它為類 Posix 解譯器,而不是相容於 Posix 的解譯器,因為它沒有實作一些最複雜的功能,這些功能在 scripts 欄位中沒有用處。例如,不支援多行流程控制結構,例如 while

腳本參數

預設情況下,任何參數在 yarn run 中腳本名稱後面,都會加入到評估的命令中。在簡單的情況下,它的運作效果很好,例如執行 yarn test packages/lib 會導致評估 jest packages/lib

{
"scripts": {
"test": "jest"
}
}

不過,在更複雜的情況下,你可能想要明確地參照這些參數。Yarn 支援使用 $0$1 等變數來做到這一點,這些變數會進行內插,並會停用自動附加參數

{
"scripts": {
"get-latest": "curl https://registry.yarnpkg.com/$0 | jq .['dist-tags'].latest"
}
}

當然,你也可以使用 $@ 陣列來擷取所有參數的清單,這將讓你可以在多個命令中重複使用它們

{
"scripts": {
"build-and-test": "yarn build \"$@\" && yarn test \"$@\""
}
}