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实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
理清apply(),call()的区别和关系
Aug 14 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
Oct 31 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
Apr 30 Javascript
jquery实现图片上传前本地预览功能
May 10 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
May 10 Javascript
详解vue父子模版嵌套案例
Mar 04 Javascript
JavaScript运动框架 多物体任意值运动(三)
May 17 Javascript
JS实现unicode和UTF-8之间的互相转换互转
Jul 05 Javascript
通过button将form表单的数据提交到action层的实例
Sep 08 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
Mar 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
php处理json时中文问题的解决方法
2011/04/12 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
python with (as)语句实例详解
2020/02/04 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
python实现处理mysql结果输出方式
2020/04/09 Python
Python利用命名空间解析XML文档
2020/08/10 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
感恩节红领巾广播稿
2014/02/11 职场文书
电教室标语
2014/06/20 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python
python实现学员管理系统(面向对象版)
2022/06/05 Python