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.pswp.cn/diannao/14653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14653.shtml
英文地址,請注明出處:http://en.pswp.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…