cross-env這是一款運行跨平台設置和使用環境變量的腳本。
為什么需要cross-env?
NODE_ENV=production像這樣設置環境變量時,大多數Windows命令提示符都會阻塞 。(Windows上的Bash是例外,它使用本機Bash。)同樣,Windows和POSIX命令使用環境變量的方式也有所不同。對於POSIX,您可以使用:$ENV_VAR 和在Windows上可以使用%ENV_VAR%。
cross-env這樣,您就可以使用單個命令,而不必擔心為平台正確設置或使用環境變量。就像在POSIX系統上運行時一樣,只需對其進行設置即可,並且cross-env會妥善設置。
在window下配置
node中常用的到的環境變量是NODE_ENV,首先查看是否存在
set NODE_ENV
如果不存在則添加環境變量
set NODE_ENV=production
環境變量追加值 set 變量名=%變量名%;變量內容
set path=%path%;C:\web;C:\Tools
某些時候需要刪除環境變量
set NODE_ENV=
在linux下配置
node中常用的到的環境變量是NODE_ENV,首先查看是否存在
echo $NODE_ENV
如果不存在則添加環境變量
export NODE_ENV=production
環境變量追加值
export path=$path:/home/download:/usr/local/
某些時候需要刪除環境變量
unset NODE_ENV
某些時候需要顯示所有的環境變量
env
更多使用文檔請點擊訪問cross-env工具官網。
安裝
一鍵安裝不多解釋
npm install --save-dev cross-env
警告!確保在安裝軟件包時可以正確拼寫,以免錯誤安裝惡意軟件
注意:cross-env的版本6僅支持Node.js 8和更高版本,才能在Node.js 7或更低版本的安裝版本5上使用 npm install --save-dev cross-env@5
使用
我在npm腳本中使用了它:
{
"scripts": {
"build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
}
}
最終,執行的命令(使用cross-spawn)為:
webpack --config build/webpack.config.js
該NODE_ENV環境變量將被設置cross-env
您也可以將命令拆分為多個命令,或者將環境變量聲明與實際命令執行分開。您可以這樣操作:
{
"scripts": {
"parentScript": "cross-env GREET="Joe" npm run childScript",
"childScript": "cross-env-shell "echo Hello $GREET""
}
}
其中childScript包含要執行的實際命令並parentScript設置要使用的環境變量。然后,而不是運行childScript,而是運行父項。這對於使用不同的env變量啟動同一命令或當環境變量太長而無法將所有內容放在一行中時非常有用。這也意味着$GREET即使在通常要求使用Windows的Windows上,也可以使用env var語法%GREET%。
如果您在美元符號前加上奇數個反斜杠,則不會替換表達式語句。請注意,這意味着在轉義JSON字符串后使用了反斜杠。"FOO=\$BAR"將不會被替換。 "FOO=\\$BAR"雖然會被替換。
最后,如果要傳遞JSON字符串(例如,使用ts-loader時),則可以執行以下操作:
{
"scripts": {
"test": "cross-env TS_NODE_COMPILER_OPTIONS={\"module\":\"commonjs\"} node some_file.test.ts"
}
}
要特別注意三倍反斜線(\)之前的 雙引號 (")和缺少的單引號 (')。為了同時在Windows和UNIX上運行,必須同時滿足這兩個條件。
cross-env 與 cross-env-shell
該cross-env模塊公開了兩個容器:cross-env和cross-env-shell。第一個使用來執行命令cross-spawn,第二個使用shellNode的選項spawn。
主要用例cross-env-shell是當您需要在整個嵌入式命令行腳本中而不是僅在一個命令中設置環境變量時。
例如,如果您希望將環境變量應用於一系列串聯的命令,則需要將其用引號引起來並使用 cross-env-shell代替cross-env。
{
"scripts": {
"greet": "cross-env-shell GREETING=Hi NAME=Joe "echo $GREETING && echo $NAME""
}
}
經驗法則是:如果要傳遞給cross-env包含要解釋的特殊Shell字符的命令,請使用 cross-env-shell。否則請堅持cross-env。
在Windows上cross-env-shell,如果要 在程序內部處理信號事件,則 需要使用。常見的情況是當您想要捕獲SIGINT通過Ctrl + C在命令行界面上按調用的 事件時。