基于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中使用inline函数的问题
Mar 08 Javascript
FormValid0.5版本发布,带ajax自定义验证例子
Aug 17 Javascript
JQuery 常用方法基础教程
Feb 06 Javascript
javascript 全角转换实现代码
Jul 17 Javascript
JQuery.Ajax之错误调试帮助信息介绍
Jul 04 Javascript
jquery.ui.draggable中文文档(原文翻译)
Nov 15 Javascript
使用js dom和jquery分别实现简单增删改
Sep 11 Javascript
script标签属性用type还是language
Jan 21 Javascript
正则 js分转元带千分符号详解
Mar 08 Javascript
JS实现的简单拖拽功能示例
Mar 13 Javascript
简单实现js放大镜效果
Jul 24 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
linux下php上传文件注意事项
2016/06/11 PHP
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
Python程序员开发中常犯的10个错误
2014/07/07 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
python中的错误如何查看
2020/07/08 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
值传递还是引用传递
2015/02/08 面试题
英语生日邀请函
2014/01/23 职场文书
迟到检讨书大全
2014/01/25 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
李强优秀员工观后感
2015/06/16 职场文书
致运动员加油稿
2015/07/21 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
分享3个非常实用的 Python 模块
2022/03/03 Python
MySQL优化及索引解析
2022/03/17 MySQL