vue配置文件实现代理v2版本的方法


Posted in Javascript onJune 21, 2019

vue实现不同服务器代理,接上篇,虽然可实现多版本代理,但是每增加一种模式就需要重下新修改vue.config.js以及.env.dev.local,感觉很不智能,扩展性挺差。

主要实现思路:

 模仿vue中.env.local文件,此文件被git忽略,且可根据当前环境变量加载不同的数据,由此在项目根目录下新建development文件夹,在development文件加下建立config文件夹,用户放置配置文件,config下目前暂有两个文件 config.development.local config.owndev.local

在.gitignore中添加

development/config/config.local

development/config/config.*.local

忽略所有的配置local文件,然后通过node读取文件加载配置的json文件,并将代理规则通过代码完善,导出代理规则,最终输出的vue.config.js中实现代理,通过cross-env模块改变系统变量设置,最终实现不同环境下不同文件的加载

现新建项目,目录结构如下:

vue配置文件实现代理v2版本的方法

其中development为新添加目录,其中主要放置需要代理的文件

vue配置文件实现代理v2版本的方法

config下

vue配置文件实现代理v2版本的方法

.gitignore 添加对文件的忽略

development/config/config.local
development/config/config.*.local
development/config 下的config.development.dev
{
  "/api":"http://serverurl"
 }
development/config 下的config.owndev.dev

{
  "/api/login":"http://localhost:8080",
  "/api/register":"http://localhost:8081"
}

proxy.js实现主要的代理逻辑,思路如下,根据cross-env设置的环境变量加载不同的json文件

cross-env 用法,在package.json devDependencies中添加 ,然后npm i --save-dev cross-env即可

"devDependencies": {
 "cross-env": "^5.2.0"
 }

用法 在启动vue服务前添加 cross-env BUILD_ENV=development 即可

如下

"script":{
  "serve": "cross-env BUILD_ENV=development vue-cli-service serve",
  "owndev": "cross-env BUILD_ENV=owndev vue-cli-service serve",
}

当执行npm run serve process.env.BUILD_ENV 值为development,当执行 npm run owndev时,process.env.BUILD_ENV的值为 owndev

proxy.js实现的主逻辑如下:

var path = require('path'); //系统路径模块
var fs = require('fs'); //文件模块
const defaultProxy = {
 "/api":"http://serverUrl"
};
//根据当前的运行环境判断走哪个配置
const DEVELOPMENT = "development"
let currentEnv = process.env.BUILD_ENV?process.env.BUILD_ENV:DEVELOPMENT
let configPath = `config/config.${currentEnv}.local`
let filePath = path.join(__dirname, configPath); //文件路径,__dirname为当前运行js文件的目录
let proxyContent = null;
//读取json文件,异步
/*fs.readFile(filePath, 'utf-8', function(err, data) {
 if (!err) {
  proxyContent = data;
 } 
});*/
//将json字符串转化为json对象
try{
proxyContent = JSON.parse(fs.readFileSync(filePath,'utf-8'))
}catch(e){
proxyContent = defaultProxy
}
if(proxyContent == null){
 proxyContent = defaultProxy
}
let proxys = {}
//遍历所有的配置代理,对应不同的服务器
Object.getOwnPropertyNames(proxyContent).forEach(function (key) {
 let targetPath = proxyContent[key]
 let proxyItem = {};
 proxyItem.target = targetPath;
 proxyItem.ws = true;
 proxyItem.changeOrigin = true;
 proxyItem.pathRewrite = {}
 proxyItem.pathRewrite[`^${key}`] = '/'
 proxys[key] = proxyItem
});
module.exports = proxys

在vue.config.js中引用该文件

let proxy = require('./development/proxy/proxy')
let config = {
 publicPath:"/" ,
 devServer: {
  port: 8080,
  proxy:proxy
 }
}
module.exports = config

以上,完成。使用时只需更改 development/config/config.owndev.local文件即可,即使增加了代理也可只增加配置文件完成代理。

总结

以上所述是小编给大家介绍的vue配置文件实现代理v2版本的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JS中剪贴板兼容性、判断复制成功或失败
Mar 09 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 Javascript
jQuery 数据缓存模块进化史详细介绍
Nov 19 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
js的toUpperCase方法用法实例
Jan 27 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
jQuery实现的动态伸缩导航菜单实例
May 07 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
JavaScript面试题大全(推荐)
Sep 22 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
解决vue 子组件修改父组件传来的props值报错问题
Nov 09 Javascript
微信小程序自定义多列选择器使用详解
Jun 21 #Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
Jun 21 #Javascript
Vue多环境代理配置方法思路详解
Jun 21 #Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 #Javascript
使用express来代理服务的方法
Jun 21 #Javascript
react+redux仿微信聊天界面
Jun 21 #Javascript
基于jQuery的时间戳与日期间的转化
Jun 21 #jQuery
You might like
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
共产党员承诺书
2014/03/25 职场文书
反邪教标语
2014/06/23 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
人口与计划生育责任书
2015/05/09 职场文书
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis
python+opencv实现目标跟踪过程
2022/06/21 Python