[关闭]
@yyman001 2018-06-30T14:50:59.000000Z 字数 1815 阅读 1900

vue-cli多环境配置打包项目

vue vue-cli webpack 打包 js


背景

当我们要正式部署项目的时候,需要打包项目.一般最最简陋可以分为`开发环境`和`正式环境`,这跟公司团体的原因,有不同.但常规上应该还有个`测试环境`,如果要列出全部,大概有以下
环境类型

那么问题来了?如何设置打包配置分别根据不同环境打包?今天的内容就是为了解决这个

用到的npm包

使用打包命令来区分不同环境

  1. "scripts": {
  2. "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  3. "start": "npm run dev",
  4. "lint": "eslint --ext .js,.vue src",
  5. "build:test": "node build/build.js --NODE_ENV test",
  6. "build:dev": "node build/build.js --NODE_ENV dev",
  7. "build:prod": "node build/build.js --NODE_ENV prod"
  8. },

我们通过不同build的参数来打包,那么如何获取打包参数?(当前环境NODE_ENV,这里为了规范使用NODE_ENV,当然你可以使用 如: env 之类)
脚本参数--NODE_ENV XXX, 当然这里的dev和prod 不建议用缩写,但不强制(vue-cli 内部很多都是全称,改一字需要改很多配置)
那么如--NODE_ENV test就是代码打包测试环境的包,那怎么才可以获取到这个test?.这里需要更改用到的npm包yargs, 运行 npm -i yargs -D
我们可以写一个测试脚本来获取写这个看是否成功

  1. // demo.js
  2. const argv = require('yargs').argv
  3. const NODE_ENV = argv.NODE_ENV //为脚本 --NODE_ENV 参数名
  4. console.log(`当前环境变量NODE_ENV:${NODE_ENV}`) // 输出`demo`
  5. // 运行
  6. node demo.js --NODE_ENV demo

测试完成.下面开始配置
1.在build文件夹下添加一个webpack.env.conf.js配置文件,用于获取运行node命令脚本获取到的参数

  1. // webpack.env.conf.js
  2. /**
  3. * 根据脚本环境变量导入配置
  4. */
  5. const argv = require('yargs').argv
  6. const NODE_ENV = argv.NODE_ENV
  7. const envConfig = `../config/${NODE_ENV}.env.js`
  8. module.exports = require(envConfig)

2.屏蔽原来打包写死的环境变量文件,打开build/build.js

  1. // build.js
  2. // 注释下面代码
  3. process.env.NODE_ENV = 'production'

3.修改打包文件build/webpack.prod.conf.js
修改为

  1. // webpack.prod.conf.js
  2. // 添加环境配置文件
  3. const env = require('../config/prod.env') // 其实可以删除
  4. const envConfig = require('./webpack.env.conf')

修改env判断变量

  1. // webpack.prod.conf.js
  2. new webpack.DefinePlugin({
  3. // 'process.env': env,
  4. 'process.env': envConfig
  5. })

至此,已经可以了.
当然我们请求api,根据不同的 env 变量请求不同的服务器地址
如:

  1. export function getIp () {
  2. console.warn('当前环境: process.env', process.env.NODE_ENV)
  3. switch (process.env.NODE_ENV) {
  4. case 'test':
  5. return IP.test
  6. case 'dev':
  7. return IP.dev
  8. case 'prod':
  9. return IP.prod
  10. default:
  11. // why ? 要是process.env.NODE_ENV不存在怎么办?
  12. console.warn('getIp:异常错误')
  13. break
  14. }
  15. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注