nodejs 过滤不需要压缩的文件

nodejs yekong

nodejs项目开发中,有一个小需求就是有些文件不想被打包压缩文件中,这就需要进行过滤处理,之前使用的
nodejs 对文件进行zip压缩方法没有找到合适的解决方案,于是重新找了一个方法

使用实例

zip("./wenjian', "./wenjian.zip")

代码

import fs from 'fs'
import path from 'path'
import JSZIP from 'jszip'

// 排除部分文件或文件夹
const exclude = name => !['demo2.html'].includes(name)

// zip 递归读取文件夹下的文件流
function readDir(zip, nowPath) {
    // 读取目录中的所有文件及文件夹(同步操作)
    let files = fs.readdirSync(nowPath)

    //遍历检测目录中的文件
    files.filter(exclude).forEach((fileName, index) => {
        // 打印当前读取的文件名
        console.log(fileName, index)

        // 当前文件的全路径
        let fillPath = path.join(nowPath, fileName)

        // 获取一个文件的属性
        let file = fs.statSync(fillPath)

        // 如果是目录的话,继续查询
        if (file.isDirectory()) {
            // 压缩对象中生成该目录
            let dirlist = zip.folder(fileName)
            // (递归)重新检索目录文件
            readDir(dirlist, fillPath)
        } else {
            // 压缩目录添加文件
            zip.file(fileName, fs.readFileSync(fillPath))
        }
    })
}

// 开始压缩文件
function zip(target, output) {
    // 创建 zip 实例
    const zip = new JSZIP()

    // zip 递归读取文件夹下的文件流
    readDir(zip, target)

    // 设置压缩格式,开始打包
    zip.generateAsync({
        // nodejs 专用
        type: 'nodebuffer',
        // 压缩算法
        compression: 'DEFLATE',
        // 压缩级别
        compressionOptions: {level: 9,},
    }).then(content => {
        // 将打包的内容写入 当前目录下的 result.zip中
        fs.writeFileSync(output, content, 'utf-8')
    })
}

export {zip}

喜欢