nodeJs 常用庫之 cross-env

楔子

爲什麼會注意到這個庫呢?

起因是因爲,在公司的項目 package.json 看到 啓動或者編譯的命令是這樣寫的

"start": "cross-env NODE_ENV=development SERVICE_NAME=testServer nest start",
"start:dev": "cross-env NODE_ENV=development SERVICE_NAME=testServer nest start --watch",
"start:debug": "cross-env NODE_ENV=development SERVICE_NAME=testServer nest start --debug --watch",

而正常的NestJs 啓動命令是這樣的

"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",

有沒有發現多點東西,那這些多的東西有啥用呢?

其實就是環境變量,既然是環境變量直接卸載.env 不就行了,爲啥要用 cross-env庫來實現?帶這個問題,我們接着往下看

cross-env 爲什麼會出現

cross-env 的出現是因爲在跨平臺開發時,不同的操作系統使用不同的命令語法來設置環境變量

這會導致在編寫 npm scripts 時需要編寫多個命令,增加了項目維護的難度。

同時,如果我們將項目分享給其他人,他們可能需要對不同的平臺進行適配。

爲了解決這個問題,cross-env 庫被創建出來,它提供了一個簡單的解決方案

可以在所有平臺上都使用相同的命令語法設置環境變量,而無需擔心跨平臺問題,大大簡化了項目維護的難度,提高了開發效率。

通過使用 cross-env,開發者可以在 npm scripts 中指定環境變量,而無需考慮不同平臺下的差異。

同時,cross-env 還支持嵌套命令,可以方便地進行復雜的環境變量設置。

cross-env 解決了那些問題

跨平臺環境變量設置問題

在不同的操作系統下,設置環境變量的命令語法是不同的

比如在 Windows 下使用 set 命令,在 Linux 或 Mac 下使用 export 命令。

這會導致在編寫 npm scripts 時需要編寫多個命令,增加了項目維護的難度。

同時,如果我們將項目分享給其他人,他們可能需要對不同的平臺進行適配。

cross-env 可以在所有平臺上都使用相同的命令語法設置環境變量,而無需擔心跨平臺問題,大大簡化了項目維護的難度,提高了開發效率。

命令行參數傳遞問題

在 npm scripts 中,我們可以通過 $npm_package_config_ 前綴來訪問 package.json 文件中的配置項

例如 $npm_package_config_port 可以獲取 package.json 中定義的 port 配置項的值。

但是如果我們需要傳遞一些命令行參數,例如 --watch--reporter 等,就不能直接通過 $npm_package_config_ 前綴來訪問了。

cross-env 可以幫助我們解決這個問題,它支持嵌套命令,可以方便地進行復雜的環境變量設置,並且支持在命令行中傳遞參數。

例如:

"scripts": {
  "test": "cross-env NODE_ENV=test mocha --watch --reporter spec"
}

上述代碼中,我們在 mocha 命令後添加了 --watch--reporter spec 參數,這些參數可以在 npm scripts 中進行傳遞,並且能夠跨平臺正常工作。

cross-env 官網

https://github.com/kentcdodds/cross-env

cross-env 安裝

npm install --save-dev cross-env

案例

package.json

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "cross-env NODE_ENV=dev DB_CONNECTION_STRING=mongodb://dev:27017/myapp-dev node app.js",
    "test": "cross-env NODE_ENV=test DB_CONNECTION_STRING=mongodb://test:27017/myapp-test node app.js",
    "prod": "cross-env NODE_ENV=prod DB_CONNECTION_STRING=mongodb://prod:27017/myapp node app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "lodash": "^4.17.21",
    "moment": "^2.29.4"
  },
  "devDependencies": {
    "cross-env": "^7.0.3"
  }
}

app.js

console.log(process.env.NODE_ENV,process.env.DB_CONNECTION_STRING);

執行

npm run dev
npm run test
npm run prod

image-20230518172548806

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章