当前位置: 首页 > 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 + "旧包已删除");},);}});});});},}),],
});

相关文章:

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

通常在DevOps CICD流水线部署前端项目时,一般默认都要将dist资源打包为zip,并且把zip名称改为md5sum哈希值(用于文件完整性验证)。 md5sum是什么? md5sum 是一个在 Unix 和类 Unix 系统(如 Linux)中广泛使用的命令行…...

并行编程实战——TBB中节点的数据结构

一、节点的定义 在前面分析过了节点相关的应用和功能,也在其中分析过一些节点的数据定义情况。本文就对节点的数据定义进行一个更详细具体的分析说明,特别是对一些应用上的细节展开说明一下。知其然,然后知其所以然。 节点的定义&#xff0c…...

ClickHouse总结

背景 OLAP(联机分析处理) 是一种用于在大规模数据集上进行复杂分析的数据处理方法。与OLTP(联机事务处理)系统专注于支持日常业务交易和操作不同,OLAP系统旨在提供对多维数据的快速、灵活的查询和分析能力。 OLAP场景…...

Guava中Preconditions校验

Guava中Preconditions校验 场景引入Guava 参数校验 Preconditionspom 依赖引入常用的方法 场景引入 提出疑问?为什么不直接使用 jsr330校验注解对实体类进行校验呢? 答:不同的场景,如短信码验证登录,账号密码登录此类…...

容器技术--Docker常用命令

Docker常用命令 镜像的命令 # 查看本地所有镜像 docker images # 向服务端发送请求,服务端处理 # 只获取镜像id docker images -q # 镜像管理 docker image# 查看镜像的详细信息 docker image inspect 镜像id # 查看 容器整体信息 docker info | grep -iE...

【Linux】网络层协议——IP

一、IP协议 在前面,我们学习了应用层和传输层,接下来,我们来学习网络层,网络层的主要功能是在复杂的网络环境中确定一个合适的路由。 1.1 IP协议的基本概念 主机:配有IP地址,有可以进行路由控制的设备路由…...

【Echarts】vue3打开echarts的正确方式

ECharts 是一个功能强大、灵活易用的数据可视化工具,适用于商业报表、数据分析、科研教育等多种场景。那么该如何优雅的使用Echarts呢? 这里以vue3为例。 安装echarts pnpm i echarts封装公用方法 // ts-nocheck import * as echarts from echarts; // 我们这里借…...

一些学习three的小记录

这篇主要用来记录我学习3d渲染相关的疑问记录,后续会持续的更新,如果我的理解不对欢迎评论区更正。 目录 1.WebGLRenderer和WebGPURenderer的区别 1.1 WebGLRenderer 1.2 WebGPURenderer 二、scene.background和renderer.setClearColor有什么区别 三、renderer.setAnimat…...

Porcupine - 语音关键词唤醒引擎

文章目录 一、关于 Porcupine特点用例尝试一下 语言支持性能 二、Demo1、Python Demo2、iOS DemoBackgroundService DemoForegroundApp Demo 3、网页 Demo3.1 Vanilla JavaScript 和 HTML3.2 Vue Demos 三、SDK - Python 一、关于 Porcupine Porcupine 是一个高度准确和轻量级…...

Golang | Leetcode Golang题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) int {mp : map[byte]int{}for i : 0; i < len(s); i {mp[s[i]]}res : 0for _, v : range mp {if v&1 1 {res v - 1} else {res v}}if res<len(s) {res}return res }...

【C++】STL数据结构最全函数详解2-向量vector

关于STL&#xff0c;我们之前浅浅提过&#xff1a;这里 另外对于栈&#xff0c;这里有更加详尽的介绍&#xff1a;CSTL常用数据结构1详解---栈&#xff08;stack&#xff09;-CSDN博客 这个系列将会更加深入地从函数原型开始用详细的例子解释用法 首先这一篇介绍的是一个非常…...

阿里云 Quick BI使用介绍

Quick BI使用介绍 文章目录 阿里云 Quick BI使用介绍1. 创建自己的quick bi服务器2. 新建数据源3. 上传文件和 使用4. 开始分析 -选仪表盘5. 提供的图表6. 一个图表的设置使用小结 阿里云 Quick BI使用介绍 Quick BI是一款全场景数据消费式的BI平台&#xff0c;秉承全场景消费…...

LLMs之SuperPrompt:SuperPrompt的简介、使用方法、案例应用之详细攻略

LLMs之SuperPrompt&#xff1a;SuperPrompt的简介、使用方法、案例应用之详细攻略 目录 SuperPrompt的简介 SuperPrompt的使用方法 1、prompt SuperPrompt的案例应用 SuperPrompt的简介 SuperPrompt项目是一个开源项目&#xff0c;旨在通过设计特定的提示词来帮助我们更好…...

Java中的Web服务开发:RESTful API的最佳实践

Java中的Web服务开发&#xff1a;RESTful API的最佳实践 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代Web应用开发中&#xff0c;RESTful API是构建可伸缩、易于维护的Web服务的关键。…...

Linux创建虚拟磁盘并分区格式化

快速创建一个虚拟磁盘 你可以通过以下步骤在Linux上虚拟一个磁盘&#xff0c;并将其挂载到 /mnt/ 目录下&#xff1a; 步骤 1: 创建一个虚拟磁盘文件 使用 dd 命令创建一个虚拟磁盘文件&#xff08;例如大小为1GB&#xff09;&#xff1a; dd if/dev/zero of/root/virtual_…...

面试经典150题——最后一个单词的长度

目录 题目链接&#xff1a;58. 最后一个单词的长度 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;反向遍历 Java写法&#xff1a; C写法&#xff1a; 解法二&#xff1a;逆天解法 思路 存在的问题 总结 题目链接&…...

【C++】入门基础(上)

Hi&#xff0c;好久不见&#xff01; 目录 1、C入门小基础 1.1 祖师爷--Bjarne Stroustrup&#xff08;本贾尼斯特劳斯特卢普&#xff09; 1.2 C参考文献 1.3 书籍推荐 2、C的第一个程序 3、命名空间 3.1 namespace的价值 3.2 namespace的定义 3.3 命名空间的使…...

Mac中Twig模版安装与SSTI漏洞学习

感谢大佬的文章参考学习。 SSTI&#xff1a;https://www.cnblogs.com/bmjoker/p/13508538.html Homebrew&#xff1a;快速开始 - Homebrew 中文网 Homebrew安装 一键快捷安装&#xff1a;默认使用中科大的源 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homeb…...

【20.5 python中的FastAPI】

python中的FastAPI FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;基于 Python 3.6 的类型提示。它利用了 Python 3.7 的新特性&#xff0c;如类型提示&#xff08;Type Hints&#xff09;&#xff0c;来自动生成 A…...

研1日记13

正态分布&#xff1a; toTenor&#xff1a;转数字变为0-1 加载模型&#xff1a; model youmodel() model.load("路径") 测试单个样本&#xff1a;...

Topit:macOS窗口置顶神器,让多任务处理效率翻倍

Topit&#xff1a;macOS窗口置顶神器&#xff0c;让多任务处理效率翻倍 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否经常在macOS上同时处理多个任务时…...

AMLP:基于大语言模型的自动化机器学习势函数构建平台

1. 项目概述&#xff1a;当AI遇见原子模拟&#xff0c;AMLP如何重塑机器学习势函数构建在计算材料科学和化学物理领域&#xff0c;分子动力学模拟是我们窥探微观世界动态行为的“显微镜”。无论是研究新材料的相变过程&#xff0c;还是探索生物大分子的折叠机制&#xff0c;其核…...

30岁裸辞后,我用两个月拿下AI应用认证,现在OFFER选择困难症犯了

30岁裸辞那天&#xff0c;我最怕的不是没收入&#xff0c;而是突然发现&#xff1a;过去积累的经验&#xff0c;正在被AI重新定价。以前会写方案、做表格、跟项目&#xff0c;算是职场硬通货&#xff1b;到了2026年&#xff0c;招聘JD里开始频繁出现AI工具应用、智能工作流、Pr…...

别再用SonarQube凑数了!DeepSeek原生圈复杂度引擎的6大颠覆性能力(含GitHub私有部署密钥)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek圈复杂度分析的底层原理与范式革命 DeepSeek圈复杂度分析并非传统McCabe度量的简单复刻&#xff0c;而是基于控制流图&#xff08;CFG&#xff09;动态重构与语义感知路径裁剪的双重机制构建的新范式。…...

LaTeX公式一键转Word:3步告别数学公式编辑烦恼

LaTeX公式一键转Word&#xff1a;3步告别数学公式编辑烦恼 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 还在为Word文档中的数学公式编辑而抓狂…...

在模型广场灵活选型让我找到了更适合代码生成的Taotoken模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在模型广场灵活选型让我找到了更适合代码生成的Taotoken模型 开发代码辅助工具时&#xff0c;选择合适的模型是平衡效果与成本的关…...

MNE-Python 第9天学习笔记:源定位基础

一、什么是源定位&#xff1f; 1.1 通俗理解 到目前为止&#xff0c;我们分析的是"头皮上的脑电"&#xff1a;头皮电极 → 记录头皮表面的电位↓这就像在地球表面测量地震波我们想知道的是&#xff1a;震源在哪里&#xff1f;多深&#xff1f;源定位 从头皮电位反推…...

[特殊字符] 高效统计排序数组中目标元素的出现次数

给定一个已排序的数组和一个目标值&#xff0c;如何快速统计该目标值在数组中出现的次数&#xff1f;这是面试中非常经典的一道题&#xff0c;今天就来聊聊两种解法&#xff1a;线性搜索和二分搜索。 问题描述 假设有一个已排序的数组 arr[] 和一个整数 target&#xff0c;需…...

忆阻储层计算:预处理优化与硬件实现

1. 项目概述在当今人工智能快速发展的时代&#xff0c;神经形态计算正成为突破传统冯诺依曼架构瓶颈的重要方向。储层计算&#xff08;Reservoir Computing&#xff0c;RC&#xff09;作为一种特殊的循环神经网络架构&#xff0c;因其仅需训练输出层而显著降低了计算开销&#…...

XZ9971,60V,5A,NMOS 封装:SOT223

封装&#xff1a;SOT223类型&#xff1a;NVDS&#xff1a;60V VGS&#xff1a; 20V ID&#xff1a;5ARDS(ON)&#xff1a;10V <50mΩRDS(ON)&#xff1a;4.5V <60mΩ型号&#xff1a; XZ9971 封装&#xff1a;SOT223类型&…...