NodeJs Vue项目中对process.env的使用

NODE_ENV获取环境变量

1
2
3
4
5
let env = app.get('env')
let env = process.env.NODE_ENV
//默认 NODE_ENV 为环境变量名称
//可自行在 process.env 对象下定义需要使用的变量,在项目中可以根据
//不同的 env 值设置 defaultUrl 或者其他值

在webpack 打包的项目/Node JS项目中,可以安装 cross-env(跨Win/Linux平台设置 process.env值) 插件,在 package.json 文件中
设置不同的运行脚本,比如:

1
2
3
4
5
6
script:{
"start": "node build/dev-server.js",
"buildStag": "cross-env cross-env NODE_ENV=stag node build/dev-server.js",
"buildProd": "cross-env cross-env NODE_ENV=production node build/dev-server.js",
}
//根据上述脚本即可设置不同的 NODE_ENV 值,在文件中设置值或者加载不同的设置文件,以上配置在NODE项目中可正常运行

Vue项目中使用

在使用Vue Cli构建的项目中,
需要将process.env 设置其他变量名进行使用,如:BUILD_ENV
在 package.json 的 script 字段中作如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
"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.prod.conf.js 文件中:

1
2
3
4
5
6
7
8
9
10
11
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
new webpack.DefinePlugin({
'process.env': env,
'process.env.BUILD_ENV': JSON.stringify(process.env.BUILD_ENV)
})

即在该插件设置并暴露出 process.env 对象后,再增加
process.env.BUILD_ENV 字段并进行赋值

此时,可在前端JS文件中通过 process.env.BUILD_ENV 获得 package.json中的script获得对应值,进行其他操作,比如,引入不同环境的配置文件,如:
在config文件夹中增加 buildConfig 文件夹,其中新建以下3个文件:
dev.config.js stag.config.js prod.config.js,
在每个文件中采用module.exports的方式导出变量,如:

1
2
3
4
module.exports = {
BASE_URL: 'https://dev-api.greigreat.com',
BASE_STATIC_URL:'https://static1.greigreat.com/'
}

在其他文件中使用

1
2
3
4
5
6
7
//引入环境配置文件
//process.env.BUILD_ENV 为 webpack中的DefinePlugin暴露出的环境变量
const buildConfig = require('./buildConfig/' + process.env.BUILD_ENV + '.config')
export default {
baseUrl: buildConfig.BASE_URL,
baseStaticUrl: buildConfig.BASE_STATIC_URL
}

则可以以对象的形式获取 buildConfig并使用