NODE_ENV获取环境变量
1 | let env = app.get('env') |
在webpack 打包的项目/Node JS项目中,可以安装 cross-env(跨Win/Linux平台设置 process.env值) 插件,在 package.json 文件中
设置不同的运行脚本,比如:1
2
3
4
5
6script:{
"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
11webpack.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
4module.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并使用