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 相关文章推荐
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
Feb 07 Javascript
JQuery Ajax 跨域访问的解决方案
Mar 12 Javascript
JavaScript 大数据相加的问题
Aug 03 Javascript
不同Jquery版本引发的问题解决
Oct 14 Javascript
javascript实现添加附件功能的方法
Nov 18 Javascript
全面解析Bootstrap布局组件应用
Feb 22 Javascript
jquery基本选择器匹配多个元素的实现方法
Sep 05 Javascript
jQuery实现上下滚动公告栏详细代码
Nov 21 jQuery
详解Next.js页面渲染的优化方案
Jan 27 Javascript
解决layui下拉框监听问题(监听不到值的变化)
Sep 28 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
Vue-cli 移动端布局和动画使用详解
Aug 10 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怎样调用MSSQL的存储过程
2006/10/09 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
jQuery知识点整理
2015/01/30 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
利用ctypes提高Python的执行速度
2016/09/09 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
pytorch 求网络模型参数实例
2019/12/30 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
生态学毕业生自荐信
2013/10/27 职场文书
物业管理个人自我评价
2013/11/08 职场文书
个人生活学习自我评价范文
2013/11/26 职场文书
财务简历的自我评价
2014/03/05 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js
TS 类型兼容教程示例详解
2022/09/23 Javascript