01

案例背景

在项目中,我们经常需要存档前端每次打包的版本,方便线上快速切换不同版本使用。经过思考,我们可以在打包时,将本次打包结果另存为zip压缩包,方便后续使用。于是我准备开发一个Webpack插件实现此功能,借助iFlyCode智能编程助手,2分钟就能完成!

02

开发过程

整理好功能需求描述,发送给iFlyCode:

图片

iFlyCode生成第一个版本的代码:

图片

// my-webpack-backup-plugin.js

const fs = require('fs');

const path = require('path');

class WebpackBackupPlugin {

  constructor(options = {}) {

    this.backupDir = options.backupDir || path.join(__dirname, 'backup');

  }

  apply(compiler) {

    compiler.hooks.done.tap('WebpackBackupPlugin', (stats) => {

      // 确保备份目录存在

      if (!fs.existsSync(this.backupDir)) {

        fs.mkdirSync(this.backupDir, { recursive: true });

      }

      // 获取当前打包输出的路径

      const outputPath = compiler.options.output.path;

      // 生成备份文件名,例如:backup-YYYYMMDDHHmmss.zip

      const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);

      const backupFileName = `backup-${timestamp}.zip`;

      const backupFilePath = path.join(this.backupDir, backupFileName);

      // 使用系统命令进行压缩(需要安装zip工具)

      const zipCommand = `zip -r ${backupFilePath} ${outputPath}`;

      try {

        require('child_process').execSync(zipCommand);

        console.log(`Backup created at ${backupFilePath}`);

      } catch (error) {

        console.error('Failed to create backup:', error);

      }

    });

  }

}

module.exports = WebpackBackupPlugin;

iFlyCode会告诉我如何使用此插件:

图片

上面注意事项中,iFlyCode已经提示我需要安装zip工具,由于我是windows操作系统,我准备先不安装,直接将生成的插件放到项目里测试,这时候会报错(提示我zip工具不可用):

图片

我将问题告诉iFlyCode,并让它给我解决方案:

图片

iFlyCode提供一种解决方案,并重新生成了插件代码:

// my-webpack-backup-plugin.js

const fs = require('fs');

const path = require('path');

const archiver = require('archiver');

class WebpackBackupPlugin {

  constructor(options = {}) {

    this.backupDir = options.backupDir || path.join(__dirname, 'backup');

  }

  apply(compiler) {

    compiler.hooks.done.tap('WebpackBackupPlugin', (stats) => {

      // 确保备份目录存在

      if (!fs.existsSync(this.backupDir)) {

        fs.mkdirSync(this.backupDir, { recursive: true });

      }

      // 获取当前打包输出的路径

      const outputPath = compiler.options.output.path;

      // 生成备份文件名,例如:backup-YYYYMMDDHHmmss.zip

      const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);

      const backupFileName = `backup-${timestamp}.zip`;

      const backupFilePath = path.join(this.backupDir, backupFileName);

      // 使用archiver进行压缩

      const output = fs.createWriteStream(backupFilePath);

      const archive = archiver('zip', {

        zlib: { level: 9 }, // 设置压缩级别

      });

      archive.pipe(output);

      archive.directory(outputPath, false); // 将输出目录添加到压缩包中

      archive.finalize();

      archive.on('end', () => {

        console.log(`Backup created at ${backupFilePath}`);

      });

      archive.on('error', (err) => {

        console.error('Failed to create backup:', err);

      });

    });

  }

}

module.exports = WebpackBackupPlugin;

图片

再次将插件放入项目中,并进行测试:

图片

图片

每次打包后,都会将本地打包的内容进行压缩存档:

图片

03

总结

整体来看,iFlyCode帮我完成了Webpack插件,每次前端项目打包自动生成版本压缩包,为项目打包增添版本管理能力,降低了日常工作中的调试难度,进一步提升工作效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92920.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92920.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92920.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

19day-人工智能-机器学习-分类算法-决策树

1. 什么是决策树学过数据结构与算法的小伙伴应该对树不陌生吧,这里的决策树也是大同小异的,只是每次反之都有一个条件来决定流向的。1.1 决策节点通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值进行比较…

地球磁层全球MHD模型中模拟Dst指数的半经验方法

A semi-empirical approach to simulating the Dst index in global MHD models of Earth’s magnetosphere pdf 1 Introduction Dst指数 (Disturbance storm time index, 地磁暴时扰动指数) 是描述磁暴活动强度应用最广泛的指数,对于研究地磁扰动和磁暴具有重要意…

什么是脏读、幻读、不可重复读?

脏读、幻读和不可重复读是数据库事务隔离级别中常见的三种数据一致性问题。它们描述了在并发事务环境下可能出现的异常现象。下面通过对比表格和具体示例进行清晰解析:核心概念对比表问题类型触发场景本质原因示例脏读 (Dirty Read)事务A读取了事务B未提交的修改读取…

腾讯位置商业授权微信小程序关键词输入提示

微信小程序JavaScript SDK 开发指南 关键词输入提示 getSuggestion(options:Object) 用于获取输入关键字的补完与提示,帮助用户快速输入 注:坐标系采用gcj02坐标系 options属性说明 属性类型必填说明keywordString是用户输入的关键词(希望…

LabVIEW菜单操控

该程序围绕运行时菜单栏操作,实现从初始化构建菜单结构(含菜单项、快捷键 ),到响应交互删除特定菜单项,再到监控界面事件驱动逻辑,完成自定义菜单交互全流程,适配需灵活菜单控制的程序开发场景。…

Web 服务详解:HTTP 与 HTTPS 配置

Web 服务详解:HTTP 与 HTTPS 配置 一、HTTP 服务概述 HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于在网络上传输网页数据的基础协议,默认使用80 端口,以明文形式传输数据。常见的 HTTP 服务软…

YOLO-v2-tiny 20种物体检测模型

一、简介 YOLO-v2-tiny是基于YOLO(You Only Look Once)实时目标检测算法的轻量级版本,专门为嵌入式设备和资源受限环境优化。本模型能够检测20种常见物体类别,在保持较高检测精度的同时大幅减少了计算量和模型大小。 20种物体检测模型, 使用…

heterophilic graph和hetergeneous graph区别(附带homophilic graph 和homoegeneous graph)

Heterophilic Graph(异配图)连接的节点在属性上不相似,但是所有节点和边的类别都是同一种类型,数据集如squirrel / chameleon,它们是 heterogeneous graph(异质图)而不是Heterophilic Graph(异配…

Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,Getshell

工具介绍 Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,Getshell。JAVAFX可视化编写,博主第一次用javafx来写界面,第一次学习尝试,仅仅只用于学习尝试如果缺少什么payload,欢迎提交…

GitHub分支保护介绍(Branch Protection)(git分支保护)(通过设置规则和权限来限制对特定分支的操作的功能)

文章目录**1. 核心功能****a. 防止误操作****b. 强制代码审查****c. 状态检查(Status Checks)****d. 权限控制****2. 如何设置分支保护?**1. **进入仓库设置**2. **添加分支保护规则**3. **配置保护规则**4. **保存设置****3. 常见应用场景**…

怎么理解On-Premises

On-Premises 指的是—— 软件、系统、数据中心等部署并运行在企业自己管理的本地硬件或机房里,而不是放在云端或第三方托管环境中。 你可以把它理解成:“服务器在你自己家里(公司机房),而不是寄放在别人家(…

UserController类讲解

用户管理控制器,实现了用户CRUD操作的RESTful API: 1. 类结构与核心注解 1.1 控制器声明 RestController RequestMapping("/api/users") public class UserControllerRestController 深度解析: 组合注解:Controller Re…

【剑指offer】搜索算法

目录 📁 JZ53 数字在升序数组中出现的次数​编辑 📁 JZ4 二维数组中的查找​编辑 📁 JZ11 旋转数组的最小数字 📁 JZ38 字符串的排列​编辑 📁 JZ53 数字在升序数组中出现的次数 这就是一道简单的模板题&#xff0…

ETLCloud批流一体化体现在哪

ETLCloud批流一体化体现在哪 企业对数据处理的实时性、高效性和准确性的要求越来越高。批流一体化作为一种先进的数据处理理念,逐渐被企业所采用。 目前许多国产化ETL工具也装配了十分强大的批流一体化能力,ETLCoud就是一个很好的代表,它能够…

Mybatis学习之缓存(九)

这里写目录标题一、MyBatis的一级缓存1.1、工作原理1.2、一级缓存失效的四种情况1.3、不同的SqlSession对应不同的一级缓存1.4、同一个SqlSession但是查询条件不同1.5、同一个SqlSession两次查询期间执行了任何一次增删改操作1.6、同一个SqlSession两次查询期间手动清空了&…

windows10装Ubuntu22.04系统(双系统)

参考链接:Windows和Linux双系统的保姆级安装教程,新手小白跟着也能装_windows安装linux双系统-CSDN博客 1 前期准备 1.下载Ubuntu22.04.5 的iso镜像文件:Download Ubuntu Desktop | Ubuntu 2.准备一个U盘(空,已有文…

Pandas数据处理与分析实战:Pandas数据清洗与处理入门

数据清洗:Pandas数据处理入门 学习目标 本课程将引导学员了解数据清洗的基本概念,掌握使用Pandas库处理数据集中的缺失值、重复数据和异常值的方法,确保数据的质量,为后续的数据分析和机器学习任务打下坚实的基础。 相关知识点 Pa…

Python爬虫实战:研究ScrapyRT框架,构建图书商城数据采集系统

1. 引言 1.1 研究背景 在当今数字化时代,互联网已成为全球最大的信息库,蕴含着海量的有价值数据,涵盖商业、教育、科研、医疗等各个领域。根据 IDC(国际数据公司)预测,到 2025 年全球数据圈将增长至 175ZB,其中网络数据占比超过 60%。这些数据不仅是企业制定商业策略、…

springboot接口请求参数校验

参数校验 参数校验可以防止无效或错误的数据进入系统。通过校验前端输入的参数,可以确保数据的完整性,避免因为缺少必要的信息而导致程序错误或异常。例如,对于密码字段,可以通过校验规则要求用户输入至少8个字符、包含字母和数字…

Docker部署 Neo4j 及集成 APOC 插件:安装与配置完整指南(docker-compose)

Docker部署 Neo4j 及集成 APOC 插件:分步骤指南 摘要 :本文将分两部分详细介绍相关内容。第一部分讲解如何使用 Docker Compose 部署 Neo4j 图数据库,提供完整配置文件及常见问题解决方案;第二部分在前者基础上,介绍 A…