vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀


Posted in Javascript onJune 13, 2018

需求说明:

在开发 vue 项目的过程中遇到的需求是要把 api 接口前缀暴露在命令行,通过 npm run build apiUrl 即可修改接口入口,用于从 docker 部署到不同的测试服务器上,其次是路由模式的问题,部署到测试服务器上的需要是 history 模式,但是产品是用 electron + vue 开发的桌面应用,electron 硬性要求 vue-router 的路由模式是 hash 模式,所以命令行需新增一个配置项 mode ,mode 可选值有 history 、hash

最终结果:

npm run build '' hash  --->  使用源码中写死的 api 入口 ,vue-router 模式是 hash 模式

npm run build https://192.168.166.101:8444 history  --->  使用 https://192.168.166.101:8444 作为 api 入口,vue-router 模式是 history 模式

实现:

1.新建 base/config.js 用于存放从 webpack.prod.conf.js 里写入的数据

2.新建 base/index.js 用于将从 base/config.js 里导出的 config 挂载在 Vue 原型的 $config 对象上

3.新建 build/apiConfig.js 用于封装 fs-extra 对文件的读写

4.在 webpack.prod.conf.js 将命令行中敲入的命令写入 base/config.js 里

5.在 main.js 中将 base/index.js 抛出的 install 挂载到 Vue 上

6.在 Login.vue 和 router/index.js 里引入 this.$config.host 以及 base/config.js 即可

关键代码:

2.新建 base/index.js 用于将从 base/config.js 里导出的 config 挂载在 Vue 原型的 $config 对象上

// 将 config 封装成插件 
// example this.$config 
// 导入所有接口 
import config from './config'; 
const install = Vue => { 
  if(install.installed) 
    return; 
  install.installed = true; 
  Object.defineProperties(Vue.prototype, { 
    // 此处挂载在 Vue 原型的 $config 对象上 
    $config:{ 
      get(){ 
        return config; 
      } 
    } 
  }) 
} 
export default install;

3.新建 build/apiConfig.js 用于封装 fs-extra 对文件的读写

const fs = require("fs-extra"); 
const path = require("path"); 
var _path = path.join(__dirname, "../src/base/host.js"); 
if (!fs.pathExistsSync(_path)) { 
 // 如果不存在路径 
 fs.mkdirpSync(_path); // 就创建 
} 
module.exports = { 
 read: function() { 
  let filesData = fs.readFileSync(_path, "utf-8", function(e, data) { 
   if (e) throw e; 
   return data; 
  }); 
  return filesData; 
 }, 
 write: function(writeStr) { 
  fs.open(_path, "w", function(e, fd) { 
   if (e) throw e; 
   fs.write(fd, writeStr, 0, "utf8", function(e) { 
    if (e) throw e; 
    fs.closeSync(fd); 
   }); 
  }); 
 } 
};

4.在 webpack.prod.conf.js 将命令行中敲入的命令写入 base/config.js 里  

const apiConfig = require('./apiConfig'); 
apiConfig.read(); 
apiConfig.write( 
 `export const host = '${process.argv[2]}'; 
  export const mode = '${process.argv[3]}'; 
 // 默认全部倒出 
 // 根绝需要进行  
 export default { 
 host, 
 mode 
 }` 
);

5.在 main.js 中将 base/index.js 抛出的 install 挂载到 Vue 上

import host from './base/index'; 
Vue.use(host);

6.在 Login.vue 里引入 this.$config.host

this.$store.set("presetPort", this.$config.host ? this.$config.host.split(":")[2] : "443"); // 设置预置端口 
this.$store.set("presetHost", this.$config.host ? this.$config.host.split(":")[0] : "https"); // 设置预置协议 
this.$store.set("presetIP", this.$config.host ? this.$config.host.split(":")[1].split("/")[2] : "192.168.166.109"); // 设置预置IP

6.在 router/index.js 里引入 base/config.js

import { mode } from '@/base/config'; 
let router = null; 
let routes = [ 
 { 
  path: 'xxx', 
  name: 'xxx', 
  component: xxx 
 }...]; 
mode === 'history' ? routes.push({path:"*",component:xxx}) : ""; 
router = new Router({ 
 mode: mode, 
 routes:routes 
}) 
export default router;

总结

以上所述是小编给大家介绍的vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 浏览器检测代码精简版
Mar 04 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 Javascript
html+js实现动态显示本地时间
Sep 21 Javascript
js实现收缩菜单效果实例代码
Oct 30 Javascript
Javascript的&&和||的另类用法
Jul 23 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
RequireJS多页面应用实例分析
Jun 29 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
Jan 17 Javascript
js中自定义react数据验证组件实例详解
Oct 19 Javascript
javascript实现函数柯里化与反柯里化过程解析
Oct 08 Javascript
jquery实现手风琴案例
May 04 jQuery
uniapp 微信小程序 自定义tabBar 导航
Apr 22 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 #Javascript
ES6与CommonJS中的模块处理的区别
Jun 13 #Javascript
浅谈webpack 构建性能优化策略小结
Jun 13 #Javascript
详解webpack运行Babel教程
Jun 13 #Javascript
Babel 入门教程学习笔记
Jun 13 #Javascript
Vue中在新窗口打开页面及Vue-router的使用
Jun 13 #Javascript
微信小程序支付功能 php后台对接完整代码分享
Jun 12 #Javascript
You might like
PHP 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
javascript下function声明一些小结
2007/12/28 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
Javascript验证方法大全
2015/09/21 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
wxPython色环电阻计算器
2019/11/18 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
一套.net面试题及答案
2016/11/02 面试题
预备党员的自我评价
2014/03/12 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
经销商会议开幕词
2016/03/04 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
python中的3种定义类方法
2021/11/27 Python