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 相关文章推荐
从阿里妈妈发现的几个不错的表单验证函数
Sep 21 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
Feb 26 Javascript
js判断游览器类型及版本号的代码
May 11 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
Jan 23 Javascript
AngularJS基础 ng-include 指令简单示例
Aug 01 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
Dec 01 Javascript
ajax前台后台跨域请求处理方式
Feb 08 Javascript
vue 纯js监听滚动条到底部的实例讲解
Sep 03 Javascript
[原创]微信小程序获取网络类型的方法示例
Mar 01 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
Jul 05 Javascript
design vue 表格开启列排序的操作
Oct 28 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 之入门篇
2006/12/04 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
date.parse在IE和FF中的区别
2010/07/29 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
详解Python中dict与set的使用
2015/08/10 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
python分析作业提交情况
2017/11/22 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
虚拟机下载python是否需要联网
2020/07/27 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
音乐教学反思
2014/02/02 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
单位租房协议书范本
2014/12/04 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
python运行脚本文件的三种方法实例
2022/06/25 Python