文章

Development快速切换线上资源

Development快速切换线上资源

开发环境快速切换线上资源Vue+webpack

一、tips

你们的后端资源是否区分(dev)开发环境、(test)测试环境、(grayscale)预发布环境、(prod)生产环境呢,这是一个我们在开发协作过程中很常见的。那么你们是否有过,在test环境下开发着,此时有一个紧急任务是别的环境出现了问题或线上Bug,此时没办法要重新跑其他环境的资源呢,有因为项目依赖性过多,导致需要等待!如果你有这个苦恼,那么我的实战篇可能可以帮到你

二、原理:

利用了NodeJS的能力,我们启用了本地快速切换资源,避免了依赖包重新去输出的时间等待。

三、在build文件下需要新建几个文件:

1、proxy-change-middleware.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const getTable = require('./proxy-table.js')  // 这是存放你们环境资源代理的文件
const path = require('path') // node自带
const fs = require('fs')  // node自带

module.exports = (app, instance, compiler) => {
	// 创建跳板文件
	fs.writeFileSync('./build/proxy-flag-file.js', '')
	app.use('/changeProxy', (req, res, next) => {
    const proxyTable = getTable(req.query.target)
    if (!proxyTable[0].target) {
      res.json({
        status: 'error',
        message: '找不到对应的target环境'
      })
      res.end()
      return
    }
    for (let i = 0; i < app._router.stack.length; i++) {
      if (app._router.stack[i].name === 'handle') {
        app._router.stack.splice(i, 2)
        i--
      }
    }
    instance.options.proxy = proxyTable
    instance.setupProxyFeature()
    process.env.PROXY_TARGET = proxyTable[0].target
    trigger()
    res.json({
      status: 'success',
      message: `已切换到${req.query.target}环境`
    })
    res.end()
  })
}
let data = ''
const trigger = () => {
  data = data ? '' : '1'
  const file = path.resolve(__dirname, './proxy-flag-file.js')
  fs.writeFileSync(file, data)
}

2、proxy-flag-file.js

空白文件

3、proxy-table.js

代理资源集合文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 需要代理的实际域名环境资源
const API_MAP = {
  '/micro': {
    dev: 'https://dev_xxxx',
    test: 'https://test_xxxx',
    grayscale: 'https://grayscale_xxxx',
    prod: 'https://xxxxx'
  }
}

module.exports = (proxy) => {
  return [
    {
      context: ['/micro'],
      target: API_MAP['/micro'][proxy],
      changeOrigin: true,
      secure: false
    }
  ]
}

4、该需要在哪里使用呢?在你们写打包输出config配置文件里面

webpack.dev.config.js

1
2
3
4
5
6
7
8
const proxyChangeMiddleware = require('./proxy-change-middleware') // 引入我们的文件

// 然后找到你们的devServer对象

devServer: {
  //...
  before: proxyChangeMiddleware  //引入使用
}

四、我们大功告成啦!

1、接下来如何使用呢!

change-proxy

2、本地运行的IP/changeProxy?target={env}

五、成果:

如果没有切换成功,看看是否资源正确使用到了哦!

是否可以帮助到你提高开发效率呢!

领导都要夸你高效呢!

本文由作者按照 CC BY 4.0 进行授权