基于webpack 2.x 的多环境打包配置
在我们实际的项目开发中,可能有多个部署环境,测试环境,预发环境,正式环境。每个环境的请求URL都不同,每次打包时手动更换很麻烦,此时就需要配置多环境打包。
- 安装cross-env
Run scripts that set and use environment variables across platforms
跨平台设置和使用环境变量的运行脚本
npm install cross-env --save
Or
yarn add cross-env --save
- 修改package.json
build 通过cross-env 设置了不同的变量 env_config ,在node环境下运行build.js
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"test": "npm run unit",
"build:test": "cross-env env_config=test node build/build.js",
"build:pre": "cross-env env_config=pre node build/build.js",
"build:prod": "cross-env env_config=prod node build/build.js"
},
3.修改build.js
// 删除这一句
// process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
//这里是修改,读取设置的变量
const spinner = ora('building for ' + process.env.env_config)
spinner.start()
4.在config文件夹下新建pre.env.js。test.env.js 和 prod.env.js 同理,设置不同的BaseURL
'use strict'
const merge = require('webpack-merge')
const devEnv = require('./dev.env')
module.exports = merge(devEnv, {
NODE_ENV: '"pre"',
BASE_URL:'"http://pre.xxx.com/api/"'
})
5.修改webpack.prod.config.js
删除这一段
// const env = process.env.NODE_ENV === 'testing'
// ? require('../config/test.env')
// : require('../config/prod.env')
//根据执行的不同的命令去加载不同的文件
const env = process.env.NODE_ENV = require(`../config/${process.env.env_config}.env`)
//中间部分代码省略
new webpack.DefinePlugin({
'process.env': env
}),
没错,就是这么简单,我们去测试一下,假如使用axios发送http请求
axios.defaults.baseURL = process.env.BASE_URL;
去测试一下baseURL是否设置成功吧。欢迎给我留言。