1. const JSZip = require("jszip");
    2. const zip = new JSZip();
    3. const fs = require("fs");
    4. const path = require("path");
    5. function readDir(zip, dirPath) {
    6. // 读取dist下的根文件目录
    7. const files = fs.readdirSync(dirPath);
    8. files.forEach(fileName => {
    9. const fillPath = dirPath + "/" + fileName;
    10. const file = fs.statSync(fillPath); // 如果是文件夹的话需要递归遍历下面的子文件
    11. if (file.isDirectory()) {
    12. const dirZip = zip.folder(fileName);
    13. readDir(dirZip, fillPath);
    14. } else {
    15. // 读取每个文件为buffer存到zip中
    16. zip.file(fileName, fs.readFileSync(fillPath));
    17. }
    18. });
    19. }
    20. function create(sourceDir) {
    21. readDir(zip, sourceDir);
    22. zip
    23. .generateAsync({
    24. type: "nodebuffer", // 压缩类型
    25. compression: "DEFLATE", // 压缩算法
    26. compressionOptions: {
    27. // 压缩级别
    28. level: 9
    29. }
    30. })
    31. .then(content => {
    32. const dest = path.join(__dirname, "./dist/zip");
    33. if (dest) {
    34. // 删除旧包目录
    35. const folder_exists = fs.existsSync("./dist/zip");
    36. if (folder_exists == true) {
    37. const dirList = fs.readdirSync("./dist/zip");
    38. dirList.forEach(function(fileName) {
    39. fs.unlinkSync("./dist/zip/" + fileName);
    40. });
    41. }
    42. }
    43. // 创建新包目录
    44. fs.mkdirSync(dest, { recursive: true }); // 把zip包写到硬盘中,这个content现在是一段buffer
    45. fs.writeFileSync(`${dest}/miniPrograms.service.zip`, content);
    46. });
    47. }
    48. function generateZip() {
    49. const sourceDir = path.join(__dirname, "./dist");
    50. fs.access(sourceDir, err => {
    51. if (err) {
    52. fs.mkdirSync(sourceDir);
    53. }
    54. create(sourceDir);
    55. });
    56. }
    57. generateZip();