解决node项目启动时process.env.NODE_ENV为undefined的问题

7,187 阅读2分钟

背景

在启动node进程时,希望不同的环境运行不同的命令,且环境也有不同的接口的baseUrl,这时就需要用到process.env.NODE_ENV来判断环境了。但是当在config文件中打印process.env.NODE_ENV时却是undefined,哈哈,这是因为你并没有在运行命令时把NODE_ENV加进来。

原始代码:

"scripts": {
    "start": "node src/index.js",
    "dev": "nodemon src/index-new.js",
    "test": "nodemon src/index-new.js",
    "uat": "nodemon src/index-new.js",
    "prod": "nodemon src/index-new.js"
  }

解决方案

通过google,找到了解决方案,需要在运行命令时把NODE_ENV=development加入进来: 改变后的代码:

 "scripts": {
    "start": "node src/index.js",
    "dev": "NODE_ENV=development nodemon src/index-new.js",
    "test": "NODE_ENV=test nodemon src/index-new.js",
    "uat": "NODE_ENV=uat nodemon src/index-new.js",
    "prod": "NODE_ENV=production nodemon src/index-new.js"
  }

跨平台兼容方案

使用上面代码时在windows平台上会发现,NODE_ENV会报错

'NODE_ENV' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

npm ERR! Windows_NT 6.1.7601
npm ERR! argv "D:\\nodejs\\node.exe" "D:\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "start"
npm ERR! node v4.0.0-rc.5
npm ERR! npm  v2.14.2
npm ERR! code ELIFECYCLE
npm ERR! yy-ydh-web@1.0.7 start: `npm run clear&& NODE_ENV=development && webpack-dev-server --host 0.0.0.0 --devtool ev
al --progress --color --profile`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the yy-ydh-web@1.0.7 start script 'npm run clear&& NODE_ENV=development && webpack-dev-server --host
0.0.0.0 --devtool eval --progress --color --profile'.
npm ERR! This is most likely a problem with the yy-ydh-web package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     npm run clear&& NODE_ENV=development && webpack-dev-server --host 0.0.0.0 --devtool eval --progress --color
 --profile
npm ERR! You can get their info via:
npm ERR!     npm owner ls yy-ydh-web
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     D:\workspace\node_modules\yy-ydh-web\npm-debug.log

这是因为windows平台不支持NODE_ENV=development 方式,其实要做windows平台的兼容也很简单,加一个cross-env 就可以了。

首先安装:npm install --save-dev cross-env
最后修改的package.json中的代码:

"scripts": {
    "start": "node src/index.js",
    "dev": "cross-env  NODE_ENV=development nodemon src/index-new.js",
    "test": "cross-env  NODE_ENV=test nodemon src/index-new.js",
    "uat": "cross-env  NODE_ENV=uat nodemon src/index-new.js",
    "prod": "cross-env  NODE_ENV=production nodemon src/index-new.js"
  }

参考链接: segmentfault.com/a/119000000…