腳本
環境檔案
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 \"$@\""
}
}