nodejs实现生成加密zip压缩包,封装成一个vite插件

实现生成加密zip压缩包的nodejs脚本

pnpm i -D archiver archiver-zip-encrypted
const { cwd } = require("node:process");
const path = require("path");
const fs = require("fs-extra");
const archiver = require("archiver");// 检查是否注册过该格式
if (!archiver.isRegisteredFormat("zip-encrypted")) {archiver.registerFormat("zip-encrypted", require("archiver-zip-encrypted"));
}
const defaultOption = {sourceName: "dist",targetName: "dist",password: "password",
};function compression(options = defaultOption) {const sourceName = options.sourceName ?? "dist";const targetName = options.targetName ?? "dist";const password = options.password ?? "password";const sourcePath = path.resolve(cwd(), sourceName);const targetPath = path.resolve(cwd(), `${targetName}.zip`);try {const output = fs.createWriteStream(targetPath);const archive = archiver("zip-encrypted", {zlib: { level: 9 },encryptionMethod: "zip20",password,});output.on("close", () => {console.log(`Zip file  ${targetName}.zip created successfully.`);});archive.on("error", (err) => {console.error("Error while creating zip:", err);});archive.pipe(output);archive.directory(sourcePath, false);archive.finalize();console.log(`Created ${targetName}.zip with password.`);} catch (err) {console.error("Error while creating zip:", err);}
}compression();

封装成一个vite插件

const { cwd } = require('node:process');
const path = require('path');
const fs = require('fs-extra');
const archiver = require('archiver');if (!archiver.isRegisteredFormat('zip-encrypted')) {archiver.registerFormat('zip-encrypted', require('archiver-zip-encrypted'));
}const defaultOption = {sourceName: 'dist',targetName: 'dist',password: 'password!',
};function compression(options = defaultOption) {const sourceName = options.sourceName ?? 'dist';const targetName = options.targetName ?? 'dist';const password = options.password ?? 'password';const sourcePath = path.resolve(cwd(), sourceName);const targetPath = path.resolve(cwd(), `${targetName}.zip`);return {name: 'compression',closeBundle() {console.log('Starting to zip...');try {const output = fs.createWriteStream(targetPath);const archive = archiver('zip-encrypted', {zlib: { level: 9 },encryptionMethod: 'zip20',password,});output.on('close', () => {console.log(`Zip file  ${targetName}.zip created successfully.`);});archive.on('error', (err) => {console.error('Error while creating zip:', err);});archive.pipe(output);archive.directory(sourcePath, false);archive.finalize();console.log(`Created ${targetName}.zip with password.`);} catch (err) {console.error('Error while creating zip:', err);}},};
}module.exports = {compression,
};

vite.config.js中使用vite插件

import { compression } from './plugin/zip.js';export default ({ mode }) => {return defineConfig({...plugins: [...compression(),],});
};

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

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

相关文章

C++进阶:C++11(列表初始化、右值引用与移动构造移动赋值、可变参数模版...Args、lambda表达式、function包装器)

C进阶:C11(列表初始化、右值引用与移动构造移动赋值、可变参数模版…Args、lambda表达式、function包装器) 今天接着进行语法方面知识点的讲解 文章目录 1.统一的列表初始化1.1{}初始化1.2 initializer_listpair的补充 2.声明相关关键字2.1a…

python实现对应分析的随笔记

文档来源: Correspondence analysis 1 对应分析 参考: SPSS(十二)SPSS对应分析(图文数据集)案例6:SPSS–对应分析10 对应分析 对应分析的实质(理论很复杂,但是结果很明…

os.path 提供用于处理文件路径和文件的系统函数

在Python中,os.path模块提供了一系列用于处理文件路径和文件的系统函数。 获取文件路径信息 os.path.abspath(): 获取文件的绝对路径。os.path.dirname(): 获取文件路径的目录名。os.path.basename(): 获取文件路径的文件名。os.path.split(): 分割路径为目录和文件…

创新指南|利用电商产品视频进行渠道营销的最佳策略,不断提升销售额

无论企业的利基市场如何,电商产品视频都已被证明是非常可靠的资产,可以让目标受众了解您所提供的产品——关键功能、展示重要的差异化优势甚至改变大多数营销活动的游戏规则。阅读本文,全面了解电商产品视频如何融入营销推广,以最…

基于python向量机算法的数据分析与预测

3.1 数据来源信息 该数据集来源于Kaggle网站,数据集中包含了罗平菜籽油的销售数据,每行数据对应一条记录,记录了罗平菜籽油销售数据。其中,菜籽产量、菜籽价格和菜籽油价格是数值型数据,共2486条数据。 通过读取Exce…

SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文件目录 1.0 Mybatis 概述 2.0 数据库连接池 2.1 数据库连接池的主要作用包括 2.2 如何切换数据库连接池? 3.0 配置环境 4.0 Lombok 工具包 4.1 如何导入到项目中呢…

Transformer详解(3)-多头自注意力机制

attention multi-head attention pytorch代码实现 import math import torch from torch import nn import torch.nn.functional as Fclass MultiHeadAttention(nn.Module):def __init__(self, heads8, d_model128, droput0.1):super().__init__()self.d_model d_model # 12…

比较含退格的字符串-力扣

做这道题时出现了许多问题 第一次做题思路是使用双指针去解决&#xff0c;快慢指针遇到字母则前进&#xff0c;遇到 # 则慢指针退1&#xff0c;最开始并未考虑到 slowindex < 0 ,从而导致越界。第二个问题在于&#xff0c;在最后判断两个字符串是否相同时&#xff0c;最初使…

力扣HOT100 - 31. 下一个排列

解题思路&#xff1a; 数字是逐步增大的 步骤如下&#xff1a; class Solution {public void nextPermutation(int[] nums) {int i nums.length - 2;while (i > 0 && nums[i] > nums[i 1]) i--;if (i > 0) {int j nums.length - 1;while (j > 0 &&…

Linux中“用户管理”

我们linux中是靠用户登陆的&#xff0c;每一个用户都是唯一的&#xff0c;不可重复的&#xff0c;也是标识2计算机上的资源归属&#xff0c;那么它Linux中关联什么作用我们详细了解一下&#xff1a; 一、了解用户 &#xff08;1&#xff09;保存用户的位置 保存账号和密码的数…

Tina-Linux -- 5. 网络通信(有线网络,无线网络,SSH链接)

有线网络 bash 指令 ifconfig eth0 192.168.2.222 netmask 255.255.255.0 up route add default gw 192.168.2.1开机自启 修改网络设置文件 /etc/init.d/S40network #!/bin/sh # # Start the network.... ## Debian ifupdown needs the /run/network lock directory mkdir …

视频码流分析工具

一、VQ Analyzer 在线使用说明&#xff1a; https://vicuesoft.com/vq-analyzer/userguide/ ref&#xff1a; Video Analyzer and Streaming Tester Software – VQ Analyzer HEVC 分析工具 - 懒人李冰 推荐一个开源且跨平台的免费码流分析软件YUView - 知乎

企业管理咨询在当前市场环境下的基本现状

随着全球经济的深度融合和数字化转型的加速推进&#xff0c;企业对于高效、专业的管理咨询服务的需求日益旺盛。那么&#xff0c;企业管理咨询在当前市场环境下究竟呈现出了怎样的基本现状呢&#xff1f; 首先&#xff0c;从市场规模来看&#xff0c;企业管理咨询行业正在持续扩…

网络设备的优势

网络设备在构建和维护高效、安全、可靠的网络环境中发挥着至关重要的作用。它们的功能多样&#xff0c;涉及数据传输、连接、安全、管理等多个方面。接下来&#xff0c;我们将深入探讨几种常见网络设备的优势及其应用场景。 交换机&#xff08;Switch&#xff09; 交换机主要…

寻找峰值 ---- 二分查找

题目链接 题目: 分析: 因为题目中要找的是任意一个峰值即可, 所以和<山脉数组的峰值索引>这道题差不多因为峰值左右都小于峰值, 所以具有"二段性", 可以使用二分查找算法如果nums[mid] < nums[mid 1], mid一定不是峰值, 所以left mid 1如果nums[mid] &…

自主创新助力科技强军,麒麟信安闪耀第九届军博会

由中国指挥与控制学会主办的中国指挥控制大会暨第九届北京军博会于5月17日-19日在北京国家会议中心盛大开展&#xff0c;政府、军队、武警、公安、交通、人防、航天、航空、兵器、船舶、电科集团等从事国防军工技术与产业领域的30000多名代表到场参加。 麒麟信安作为国产化方案…

重学java 42.多线程 等待唤醒机制案例分析

Strength is built under a heavy load,I am expecting to pick up all of my loads and travel on. —— 24.5.24 章节重点 1.会用wait和notify两个方法 2.会使用Lock锁对象 3.会利用Cal1able接口实现多线程 4.会使用线程池完成多线程 等待唤醒案例分析&#xff08;线程之间的…

C++ TCP发送Socket数据

DEVC需要加入ws2_32库 #include <iostream> #include <winsock2.h>#pragma comment(lib, "ws2_32.lib")void sendData(const char* ip, int port, const char* data) {WSADATA wsaData;SOCKET sockfd;struct sockaddr_in server_addr;// 初始化Winsock…

Qt moc系统的黑魔法?

Qt的元对象系统&#xff08;Meta-Object System&#xff09;是Qt框架的核心功能之一&#xff0c;为C语言增加了一些动态特性&#xff0c;借助元对象系统Qt可以实现以下功能 信号与槽机制&#xff08;Signals and Slots&#xff09;运行时类型信息&#xff08;Run-Time Type In…

【高频】从输入URL到页面展示到底发生了什么?

一、相关衍生面试问题&#xff1a; 浏览器输入美团网站&#xff0c;从回车到浏览器展示经历了哪些过程 &#xff1f; http输入网页之后的流程&#xff1f; 百度搜索页面&#xff0c;从点开搜索框&#xff0c;到显示搜索页面经历了什么&#xff1f; 二、探究各个过程&#x…