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

实现生成加密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(),
    ],
  });
};

猜你喜欢

转载自blog.csdn.net/qq_42611074/article/details/139147184