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实现的页面关键字密度查询代码
Dec 27 Javascript
JS IE和FF兼容性问题汇总
Feb 09 Javascript
jquery 查找新建元素代码
Jul 06 Javascript
使用js的replace()方法查找字符示例代码
Oct 28 Javascript
jQuery实现带有洗牌效果的动画分页实例
Aug 31 Javascript
js简单判断移动端系统的方法
Feb 25 Javascript
纯JavaScript手写图片轮播代码
Oct 20 Javascript
JS瀑布流实现方法实例分析
Dec 19 Javascript
Javascript之深入浅出prototype
Feb 06 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
Aug 15 Javascript
JavaScript 预解析的4种实现方法解析
Sep 03 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 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模板技术[转]
2007/01/04 PHP
PHP多个版本的分析解释
2011/07/21 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
PHP文件上传类实例详解
2016/04/08 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
jQuery的学习步骤
2011/02/23 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
python制作websocket服务器实例分享
2016/11/20 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
烹饪自我鉴定
2014/03/01 职场文书
货车司机岗位职责
2014/03/18 职场文书
社团活动总结模板
2014/06/30 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
社区党员公开承诺书
2014/08/30 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
人事主管岗位职责
2015/02/04 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
Spring Cloud 中@FeignClient注解中的contextId属性详解
2021/09/25 Java/Android
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers