基于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 相关文章推荐
利用javascript/jquery对上传文件格式过滤的方法
Jul 25 Javascript
jQuery lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
jQuery过滤选择器用法示例
Sep 12 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
js 两个日期比较相差多少天的实例
Oct 19 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
Nov 30 Javascript
vue自定义filters过滤器
Apr 26 Javascript
vue 循环加载数据并获取第一条记录的方法
Sep 26 Javascript
vue路由前进后退动画效果的实现代码
Dec 10 Javascript
Vue通过WebSocket建立长连接的实现代码
Nov 05 Javascript
Vue 技巧之控制父类的 slot
Feb 24 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
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
php字符串过滤与替换小结
2015/01/26 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
深入理解javaScript中的事件驱动
2013/05/21 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
JS实现手风琴特效
2020/11/08 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python 抓取动态网页内容方案详解
2014/12/25 Python
python插入排序算法实例分析
2015/07/03 Python
python机器学习之神经网络(二)
2017/12/20 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
什么时候用assert
2015/05/08 面试题
公务员培训自我鉴定
2013/09/19 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书