Nodejs项目启动和编译根据命令参数使用不同的环境配置

使用process.env来实现根据环境不同加载不同的配置,process.env的官方介绍参考:process.env 使用介绍:Node.js中环境变量process.env的一些事详解

实现的效果

package.jsonscripts属性中增加以下配置

  "scripts": {
    "dev": "cross-env env_config=dev webpack-dev-server --inline --progress --config build/webpack.dev.conf.js ",
    "test": "cross-env env_config=test webpack-dev-server --inline --progress --config build/webpack.dev.conf.js ",
    "prod": "cross-env env_config=prod webpack-dev-server --inline --progress --config build/webpack.dev.conf.js ",
    "start": "npm run dev",
    "build": "cross-env env_config=dev node build/build.js",
    "build:test": "cross-env env_config=test node build/build.js",
    "build:prod": "cross-env env_config=prod node build/build.js"
  },

这样就可以在项目中使用以下命令了: npm run dev 以使用开发环境配置启动项目 npm run test 以测试环境配置启动项目 npm run prod 以生产环境配置启动项目 npm run build 以开发环境配置编译项目 npm run build:test 以测试环境配置编译项目 npm run build:prod 以生产环境配置编译项目

实现步骤

安装cross-env

参考:cross-env解决跨平台设置NODE_ENV的问题

config目录

先在项目的config目录建立三个环境对应的配置文件

Alt text

配置文件内容为需要在程序中根据环境切换的配置信息,例如: dev.env.js 内容:

module.exports = {
  NODE_ENV: '"development"',
  BASE_API_URL: '"dev_API_Url"',
}

test.env.js 内容:

module.exports = {
  NODE_ENV: '"production"',
  BASE_API_URL: '"test_API_Url"',
}

build目录

修改build.js

修改spinner 用于提示当前以哪个环境编译项目。

var spinner = ora('building for '+ process.env.env_config+ ' environment...' )
spinner.start()

修改webpack.dev.conf.js (启动使用的配置)

在头部引入配置的地方,增加根据当前环境配置数据,动态引入环境对应的配置信息。

const env = require('../config/'+process.env.env_config+'.env')

plugins 修改process.en使用加载的env

  plugins: [
    new webpack.DefinePlugin({
      'process.env':env
    }),

修改webpack.prod.conf.js (编译使用的配置)

在头部引入配置的地方,增加根据当前环境配置数据,动态引入环境对应的配置信息。

const env = require('../config/'+process.env.env_config+'.env')

plugins 修改process.en使用加载的env

  plugins: [
    new webpack.DefinePlugin({
      'process.env':env
    }),

业务代码中使用

直接使用process.env这个全局变量的属性就可以,不需要引入。

let baseUrl = process.env.BASE_API_URL;