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 相关文章推荐
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
Mar 28 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
Jan 15 Javascript
append和appendTo的区别以及appendChild用法
Dec 24 Javascript
推荐一个自己用的封装好的javascript插件
Jan 29 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
May 18 Javascript
JS搜狐面试题分析
Dec 16 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
Dec 19 Javascript
关于vue.js过渡css类名的理解(推荐)
Apr 10 Javascript
js禁止浏览器页面后退功能的实例(推荐)
Sep 01 Javascript
vue-cli脚手架的安装教程图解
Sep 02 Javascript
使用React-Router实现前端路由鉴权的示例代码
Jul 26 Javascript
JavaScript实现栈结构详细过程
Dec 06 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
JS 文件大小判断的实现代码
2010/04/07 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
python中常用的九种预处理方法分享
2016/09/11 Python
使用python实现链表操作
2018/01/26 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Python进行特征提取的示例代码
2020/10/15 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
马来西亚网上购物:Youbeli
2018/03/30 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
《月光启蒙》教学反思
2014/03/01 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
对象析构函数__del__在Python中何时使用
2022/03/22 Python
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫
Kubernetes控制节点的部署
2022/04/01 Servers