基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法


Posted in Javascript onDecember 09, 2018

背景

•基于Vue-cli 项目产品部署,涉及到的交互的地址等配置信息,每次都要重新打包才能生效,极大的降低了效率。我们的目的是让项目实施的小伙伴重新快乐起来。网上实现的方式,都是半自动化的,还需要重新修改。

需求点

•配置化:打包后的配置文件可二次修改
•配置自动生成:vue-cli 提供了各种环境的打包,要实现相关配置文件的自动打包
•研发人员无痛感:对于产品研发人员来说,不需要增加额外的打包成本,基于Vue-cli的开发习惯不变。

实现步骤

一:配置自动生成

•安装generate-asset-webpack-plugin插件。用于配置文件自动生成。

npm install --save-dev generate-asset-webpack-plugin

•配置webpack.prod.conf.js文件.新增如下代码

// 这段代码在配置文件开头
var GenerateAssetPlugin = require('generate-asset-webpack-plugin'); //Add:Strony;Date:2018年12月7日
const env = require('../config/' + process.env.env_config + '.env')
// 打包后配置文件:新增 2018年12月7日;Strony
var createServerConfig = function (compilation) {
 //Step1:先复制原对象
 var parseEnv = Object.assign({ _hash: compilation.hash}, env)
 //Step2:去除配置文件中的引号
 Object.keys(parseEnv).forEach(function (key) {
  parseEnv[key] = parseEnv[key].replace(/"/g, "");
 });
 return JSON.stringify(parseEnv, null, 2);
}
// 这段代码加在plugins:[]中
 new GenerateAssetPlugin({
   filename: utils.assetsPath('../static/serverConfig.json'),
   fn: (compilation, cb) => {
    cb(null, createServerConfig(compilation));
   },
   extraFiles: []
  })

•输入npm run build:prod 打包命令.vue-cli 默认提供了几个环境的打包环境:早期版本直接:npm run build

基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法

结果如下:

基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法

•生成的配置文件样式如下:

{
 "_hash": "52f44b45b5b600b7f36e",
 "NODE_ENV": "production",
 "ENV_CONFIG": "sit",
 "BASE_API": "http://*****/APIPlateForm/",
 "BASE_ADDR": "http://****/",
 "REPORT_ADDR": "******"
}

二:全局变量从配置文件读取

1.增加serverConfig.json。目的是开发人员本地开发时候,可以从配置文件读取。内容Copy本地的dev.env.js.住里面的格式为json,去除多余的引号。

基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法

2.在main.js中添加下面的代码。目的:读取配置地址挂载在全局对象

import axios from 'axios'
/* eslint-disable no-new */
// 请求文件内容
function getServerConfig() {
 return new Promise((resolve, reject) => {
  axios.get('./static/serverConfig.json').then(result => {
   console.log(result)
   const config = result.data;
   for (const key in config) {
    Vue.prototype[key] = config[key];
   }
   resolve();
  })
 })
}
// 请求文件内容及创建实例
async function main() {
 await getServerConfig();
 console.log('我的地址是' + Vue.prototype.BASE_API)
 axios.defaults.baseURL = Vue.prototype.BASE_API;//axios 的基础地址从配置文件读取
 new Vue({
  el: '#app',
  router,
  store,
  template: '<App/>',
  components: { App }
 })
}
// 方法初始执行
main();

3.项目执行:npm run dev。在浏览器的控制台下可以查看到相关的配置信息

基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法

4.使用方法:在vue文件中,直接访问使用各类地址信息。

handleWatchLib(linurl) {
    window.open(this.BASE_ADDR + linurl);
    return false;
   }

总结

以上所述是小编给大家介绍的基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery选择器特辑 详细小结
May 14 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 Javascript
js和jquery中循环的退出和继续学习记录
Sep 06 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
学习javascript面向对象 掌握创建对象的9种方式
Jan 04 Javascript
JavaScript类型系统之布尔Boolean类型详解
Jun 26 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
May 23 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
React中的Context应用场景分析
Jun 11 Javascript
JS数组去重的6种方法完整实例
Dec 08 #Javascript
原生JS实现的放大镜特效示例【测试可用】
Dec 08 #Javascript
JS实现的小火箭发射动画效果示例
Dec 08 #Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 #jQuery
ES6的Fetch异步请求的实现方法
Dec 07 #Javascript
JavaScript this绑定过程深入详解
Dec 07 #Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 #Javascript
You might like
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
sphinx增量索引的一个问题
2011/06/14 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
python图像处理之反色实现方法
2015/05/30 Python
python算法表示概念扫盲教程
2017/04/13 Python
Python随机读取文件实现实例
2017/05/25 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python三方库之requests的快速上手
2019/03/04 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
酒店管理毕业生自荐信
2013/10/24 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
初中作文评语大全
2014/04/23 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
工会文体活动总结
2015/05/07 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android