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中常用的55个经典技巧
Aug 12 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
Jun 25 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
Feb 01 Javascript
JavaScript实现三阶幻方算法谜题解答
Dec 29 Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 Javascript
Vue实现自带的过滤器实例
Mar 09 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
Jun 13 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
Sep 17 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
Jan 02 Javascript
微信小程序前端promise封装代码实例
Aug 24 Javascript
js实现选项卡效果
Mar 07 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 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
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
python编程实现希尔排序
2017/04/13 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
Python实现京东秒杀功能代码
2019/05/16 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
Pygame的程序开始示例代码
2020/05/07 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
四年级数学教学反思
2014/02/02 职场文书
群众路线个人剖析材料
2014/10/07 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
城南旧事电影观后感
2015/06/16 职场文书
祝寿主持词
2015/07/02 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android