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 常用方法总结
Jun 03 Javascript
JavaScript判断DOM何时加载完毕的技巧
Nov 11 Javascript
javascript浏览器窗口之间传递数据的方法
Jan 20 Javascript
javascript实现输出指定行数正方形图案的方法
Aug 03 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 Javascript
js css+html实现简单的日历
Jul 14 Javascript
js实现日历的简单算法
Jan 24 Javascript
从零学习node.js之详解异步控制工具async(八)
Feb 27 Javascript
基于JavaScript表单脚本(详解)
Oct 18 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
May 22 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 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脚本的10个技巧(8)
2006/10/09 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
两个php日期控制类实例
2014/12/09 PHP
php生成curl命令行的方法
2015/12/14 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
php实现头像上传预览功能
2017/04/27 PHP
Javascript hasOwnProperty 方法 & in 关键字
2008/11/26 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
Python常用库推荐
2016/12/04 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
python批量创建指定名称的文件夹
2019/03/21 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
学生个人的自我评价分享
2013/11/05 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
商场收银员岗位职责
2015/04/07 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书