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 22 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
May 24 Javascript
JS网页图片按比例自适应缩放实现方法
Jan 15 Javascript
jQuery中clearQueue()方法用法实例
Dec 29 Javascript
javascript日期格式化方法汇总
Oct 04 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
基于JavaScript实现回到页面顶部动画代码
May 24 Javascript
jQuery操作动态生成的内容的方法
May 28 Javascript
BootStrap智能表单实战系列(七)验证的支持
Jun 13 Javascript
Js动态设置rem来实现移动端字体的自适应代码
Oct 14 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 Javascript
React Native中NavigatorIOS组件的简单使用详解
Jan 27 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
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
Django开发中复选框用法示例
2018/03/20 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Django获取应用下的所有models的例子
2019/08/30 Python
python  logging日志打印过程解析
2019/10/22 Python
详解Django CAS 解决方案
2019/10/30 Python
tensorflow多维张量计算实例
2020/02/11 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
中西医结合临床医学专业大学生自荐信
2013/09/28 职场文书
平面设计师的工作职责
2013/11/21 职场文书
大学自主招生推荐信
2014/05/10 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
大学生个人总结范文
2015/02/15 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server