基于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 常用代码技巧大收集
Feb 25 Javascript
js调用css属性写法
Sep 21 Javascript
node.js适合游戏后台开发吗?
Sep 03 Javascript
jQuery实现带动画效果的多级下拉菜单代码
Sep 08 Javascript
js实现点击每个li节点,都弹出其文本值及修改
Dec 15 Javascript
gulp解决跨域的配置文件问题
Jun 08 Javascript
JavaScript编程设计模式之构造器模式实例分析
Oct 25 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
Sep 13 Javascript
基于jquery ajax的多文件上传进度条过程解析
Sep 11 jQuery
浅析vue-router实现原理及两种模式
Feb 11 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
Mar 08 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
Jul 31 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
JavaScript 语言的递归编程
2010/05/18 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
Python学习之asyncore模块用法实例教程
2014/09/29 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
银行实习自我鉴定
2013/10/12 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
初中政治教学工作总结
2015/08/13 职场文书
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技