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 Demo模态窗口
Dec 06 Javascript
JavaScript针对网页节点的增删改查用法实例
Feb 02 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
Apr 17 Javascript
多种JQuery循环滚动文字图片效果代码
Jun 23 Javascript
JavaScript判断数字是否为质数的方法汇总
Jun 02 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
Jun 13 Javascript
详解AngularJS ui-sref的简单使用
Apr 24 Javascript
JS 实现微信扫一扫功能
Sep 14 Javascript
浅谈webpack+react多页面开发终极架构
Nov 11 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
Jan 03 Javascript
详解项目升级到vue-cli3的正确姿势
Jan 28 Javascript
jQuery实现移动端图片上传预览组件的方法分析
May 01 jQuery
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
神族 Protoss 历史背景
2020/03/14 星际争霸
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
php中Smarty模板初体验
2011/08/08 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
php依赖注入知识点详解
2019/09/23 PHP
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
Jquery之美中不足小结
2011/02/16 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
js实现自定义路由
2017/02/04 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
bootstrap-Treeview实现级联勾选
2017/11/23 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
python调用java的jar包方法
2018/12/15 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
Python和Sublime整合过程图示
2019/12/25 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
python元组拆包实现方法
2021/02/28 Python
方法名是否可以与构造器的名字相同
2012/06/04 面试题
群众路线党课主持词
2014/04/01 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
初婚初育证明范本
2014/11/24 职场文书