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 jQuery $.post $.ajax用法
Jul 09 Javascript
javascript中使用css需要注意的地方小结
Sep 01 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
Dec 09 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
JavaScript获取FCK编辑器信息的具体方法
Jul 12 Javascript
jquery实现tr元素的上下移动示例代码
Dec 20 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
Mar 20 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
JS排序之选择排序详解
Apr 08 Javascript
简单谈谈axios中的get,post方法
Jun 25 Javascript
webpack4+react多页面架构的实现
Oct 25 Javascript
Ajax是什么?Ajax高级用法之Axios技术
Apr 21 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
python实现dict版图遍历示例
2014/02/19 Python
python中from module import * 的一个坑
2014/07/20 Python
Python基础之函数用法实例详解
2014/09/10 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
Python如何操作docker redis过程解析
2020/08/10 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
初三家长会邀请函
2014/01/18 职场文书
四议两公开实施方案
2014/03/28 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
铣工实训报告
2014/11/05 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
城管年度个人总结
2015/02/28 职场文书