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

NODE_ENV获取环境变量

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 文件中
设置不同的运行脚本,比如:

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 字段中作如下配置:

  "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 文件中:

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的方式导出变量,如:

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

在其他文件中使用

//引入环境配置文件
//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并使用

推荐阅读更多精彩内容