更多npm常用模塊使用請訪問:npm常用模塊匯總
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
安裝
一鍵安裝不多解釋
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
在命令行界面上按調用的 事件時。