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_02_理解undefined和null
Oct 11 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
Jun 20 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
Nov 17 Javascript
详解Bootstrap插件
Apr 25 Javascript
Javascript 普通函数和构造函数的区别
Nov 05 Javascript
jQuery制作input提示内容(兼容IE8以上)
Jul 05 jQuery
vue-cli脚手架-bulid下的配置文件
Mar 27 Javascript
使用vuex的state状态对象的5种方式
Apr 19 Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 Javascript
使用RN Animated做一个“添加购物车”动画的方法
Sep 12 Javascript
js基于div丝滑实现贝塞尔曲线
Sep 23 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
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
PHP如何将XML转成数组
2016/04/04 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
PHP线程的内存回收问题
2016/07/08 PHP
PHP类型约束用法示例
2016/09/28 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
javascript面向对象之Javascript 继承
2010/05/04 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python每天必学之bytes字节
2016/01/28 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
python中requests小技巧
2017/05/10 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
python实现狄克斯特拉算法
2019/01/17 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
Python self用法详解
2020/11/28 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物