当前位置: 首页 > news >正文

Vite打包zip并改名为md5sum哈希案例

通常在DevOps CICD流水线部署前端项目时,一般默认都要将dist资源打包为zip,并且把zip名称改为md5sum哈希值(用于文件完整性验证)。

md5sum是什么?

md5sum 是一个在 Unix 和类 Unix 系统(如 Linux)中广泛使用的命令行工具,它主要用于计算和验证文件的 MD5 哈希值。MD5(Message-Digest Algorithm 5)是一种广泛使用的加密哈希函数,可以产生一个128位(16字节)的哈希值(通常以一个32位的十六进制数表示)。md5sum 工具的主要用途包括:

  1. 文件完整性验证:通过计算文件的 MD5 哈希值,可以验证文件在传输或存储过程中是否被篡改。如果文件的 MD5 哈希值在传输前后一致,那么可以认为文件在传输过程中未被更改。
  2. 软件分发:在软件分发过程中,开发者会提供软件的 MD5 哈希值。用户下载软件后,可以使用 md5sum 计算下载文件的 MD5 哈希值,并与开发者提供的哈希值进行比较,以确保下载的软件包完整且未被篡改。
  3. 备份验证:在备份文件或目录时,使用 md5sum 可以为每个备份文件生成一个 MD5 哈希值,并保存这些哈希值。之后,可以通过重新计算备份文件的 MD5 哈希值来验证备份的完整性和一致性。
  4. 数据去重:虽然这不是 md5sum 的主要用途,但由于 MD5 哈希值对于相同的输入总是产生相同的输出,因此可以用于快速检测数据集中的重复项。然而,由于 MD5 的安全性问题(如存在碰撞攻击),这种方法在需要高度安全性的场合并不适用。
  5. 简单加密:虽然 MD5 并不适合用于加密(因为它是一个单向哈希函数,无法从哈希值恢复原始数据),但在某些简单场景下,MD5 哈希值可以用于生成一种简单的“密码”或校验码,尽管这种方式的安全性较低。
Vite对应代码简单案例:

1,我们使用vite-plugin-zip-pack和crypto插件

npm i vite-plugin-zip-pack -Dnpm i crypto -D

2,Vite配置代码

// vite.config.ts
import fs from "fs";
import path from "path";
import crypto from "crypto";export default defineConfig({plugins: [//...zipPack({inDir: "dist",outDir: "zip/", // zip存放路径outFileName: "dist.zip", // 默认名称为distdone: () => {// zip路径const originPath = "zip/";const originFilePath = `${originPath}dist.zip`;// 读取zip内容const fileContents = fs.readFileSync(originFilePath);// 创建哈希对象const hash = crypto.createHash("md5");// 更新哈希值hash.update(fileContents);// 计算哈希值,并以16进编码制输出md5sumconst md5sum = hash.digest("hex");// 获取文件扩展名const fileExtension = path.extname(originFilePath);// 拼接md5新的文件名const newFileName = `${originPath}${md5sum}${fileExtension}`;fs.rename(originFilePath, newFileName, (err) => {if (err) throw err;console.log("文件已重命名");// 需要删除旧包 就加上这句逻辑。不用的话 那就不加了fs.readdir(originPath, (error, files) => {if (error) throw error;(files || []).forEach((element) => {if (element !== path.basename(newFileName)) {// 删除旧zipfs.unlink(path.join(originPath, element),(unlinkErr) => {if (unlinkErr) throw unlinkErr;console.log(element + "旧包已删除");},);}});});});},}),],
});

http://www.mrgr.cn/news/28513.html

相关文章:

  • 阅读2020-2023年《国外军用无人机装备技术发展综述》笔记_技术趋势
  • kafka 生产经验——数据积压(消费者如何提高吞吐量)
  • 两个链表求并集、交集、差集
  • Swagger enum 最佳实践:深度剖析与应用指南
  • Go:文件输入输出以及json解析
  • Java面向对象编程进阶之包装类
  • 用Docker 安装Nacos
  • 30款免费好用的工具,打工人必备!
  • MySQL_数据类型简介
  • 杂谈之20xx还能XXXX吗?
  • Protobuf.js 深入全面讲解教程
  • Docker部署ddns-go教程(包含完整的配置过程)
  • 深度学习自编码器 - 随机编码器和解码器篇
  • 上海餐饮数据分析与可视化
  • FastGPT一站式解决方案[2-应用篇]:轻松实现RAG-智能问答系统,AI工作流、核心模块讲解
  • Java 每日一刊(第9期):数组
  • 淘客返利系统的异步任务处理与调度
  • 【C++】基础知识 笔记
  • WPF入门教学四 WPF控件概述
  • C语言-结构体-详解
  • Linux操作系统文件权限管理
  • 【C++前后缀分解 动态规划】2100. 适合野炊的日子|1702
  • protobuf.js源码简介
  • NISP 一级 | 6.1 移动智能终端
  • C#数据结构与算法实战入门指南
  • 滑坡落石检测数据集