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 相关文章推荐
怎么用javascript进行拖拽
Jul 20 Javascript
Jquery动态进行图片缩略的原理及实现
Aug 13 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
Apr 06 Javascript
Javascript非构造函数的继承
Apr 27 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
Aug 24 Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 Javascript
js实现二级导航功能
Mar 03 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 Javascript
在vscode中统一vue编码风格的方法
Feb 22 Javascript
Angularjs中的$apply及优化使用详解
Jul 02 Javascript
angularjs性能优化的方法
Sep 05 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 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中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
Python基于template实现字符串替换
2020/11/27 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
软件测试常见笔试题
2012/02/04 面试题
一道输出判断型Java面试题
2014/10/01 面试题
写好自荐信要注意的问题
2013/11/10 职场文书
八年级语文教学反思
2014/02/11 职场文书
项目总经理岗位职责
2014/02/14 职场文书
教师一岗双责责任书
2014/04/16 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
环保标语口号
2014/06/13 职场文书
台风停课通知
2015/04/24 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android
Python绘制散乱的点构成的图的方法
2022/04/21 Python