原文地址:https://www.cnblogs.com/PigpigRun/p/10420074.html
// 原文地址:https://www.cnblogs.com/PigpigRun/p/10420074.html // $ npm i jszip -S const fs = require('fs') const path = require('path') const JSZIP = require('jszip') // 排除部分文件或文件夾 const exclude = name => !['.git', 'node_modules'].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 zipFolder({ target = __dirname, output = __dirname + '/result.zip' }) { // 創建 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') }) } zipFolder({ // 目標文件夾 target: path.join(__dirname, 'test'), // 輸出 zip output: __dirname + '/result.zip' })