Process.env在nodejs中的使用
process.env是Node.js中的环境变量,先看下官方解释:
process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程。
作为一个对象,它对于 Node.js 应用程序始终是可用的,故无需使用 require()。
process(进程)其实就是存在nodejs中的一个全局变量,所有模块都可以调用。
既然是全局变量,那就好办了,node应用,程序是始终可用的,无需require()拿来做环境配置岂不是很合适?
所以你会经常看到下面的用法:
if (process.env.NODE_ENV === 'production') {
module.exports = require('./prod.js')//正式环境代码
} else {
module.exports = require('./dev.js')//测试环境代码
}
以上代码中出现一个.NODE_ENV 这又是什么呢?
你可以console.log一下process.env 你会发现其实 .NODE_ENV这个属性是不存在滴,NODE_ENV是一个开发者自己定义的变量。经常被用来做判断生产环境和开发环境的依据。
所以你可能见到过这样的用法:
"scripts": {
"dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server",
"build": "nuxt build",
"start": "cross-env NODE_ENV=production node server/index.js",
"generate": "nuxt generate",
"test": "jest"
},
顺便说一下cross-env是运行跨平台设置和使用环境变量的脚本。
我们也可以根据环境变量导出对应的参数配置,比如做类似操作:
var dev = {};
var build = {};
module.exports = process.env.NODE_ENV === ’dev' ? dev : build;
最后看下process.env在Vue项目中的使用
在使用Vue Cli构建的项目中,
需要将process.env 设置其他变量名进行使用,如:BUILD_ENV
在 package.json 的 script 字段中作如下配置:
"scripts": {
"start": "cross-env BUILD_ENV=dev node build/dev-server.js",
"dev": "cross-env BUILD_ENV=dev node build/dev-server.js",
"build": "cross-env BUILD_ENV=dev node build/build.js",
"buildDev": "cross-env BUILD_ENV=dev node build/build.js",
"buildStag": "cross-env BUILD_ENV=stag node build/build.js",
"buildProd": "cross-env BUILD_ENV=prod node build/build.js",
"unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
},
由于搭配webpack重新设置了 process.env 的值,需要在
webpack.dev.conf.js 文件中:
webpack.dev.conf.js
new webpack.DefinePlugin({
'process.env': config.dev.env,
'process.env.BUILD_ENV': JSON.stringify(process.env.BUILD_ENV)//增加此行
})
webpack.prod.conf.js 文件中:
webpack.prod.conf.js
new webpack.DefinePlugin({
'process.env': env,
'process.env.BUILD_ENV': JSON.stringify(process.env.BUILD_ENV)
})
即在该插件设置并暴露出 process.env 对象后,再增加
process.env.BUILD_ENV 字段并进行赋值。
