zip.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const fs = require('fs');
  2. const path = require("path");
  3. const archiver = require('archiver')
  4. // 获取当前命令行上下文路径
  5. const currentDirectory = process.cwd();
  6. const distJoinPath = path.join(currentDirectory, '/zip/');
  7. if(!fs.existsSync(distJoinPath)) {
  8. fs.mkdir(distJoinPath, (err)=>{
  9. if(err){
  10. console.log('zip文件夹创建失败')
  11. }else{
  12. console.log('zip文件夹创建成功')
  13. }
  14. })
  15. }
  16. // 创建文件输出流
  17. const distZipPath = path.join(currentDirectory, '/zip/client.zip');
  18. let output = fs.createWriteStream(distZipPath)
  19. let archive = archiver('zip', {
  20. zlib: { level: 9 } // 设置压缩级别
  21. })
  22. // 文件输出流结束
  23. output.on('close', function() {
  24. console.log(`总共 ${archive.pointer()} 字节`)
  25. console.log('archiver完成文件的归档,文件输出流描述符已关闭')
  26. })
  27. // 数据源是否耗尽
  28. output.on('end', function() {
  29. console.log('数据源已耗尽')
  30. })
  31. // 存档警告
  32. archive.on('warning', function(err) {
  33. if (err.code === 'ENOENT') {
  34. console.warn('stat故障和其他非阻塞错误')
  35. } else {
  36. throw err
  37. }
  38. })
  39. // 存档出错
  40. archive.on('error', function(err) {
  41. throw err
  42. })
  43. // 通过管道方法将输出流存档到文件
  44. archive.pipe(output)
  45. const distPath = path.join(currentDirectory, '/dist/');
  46. //打包dist里面的所有文件和目录
  47. archive.directory(distPath, false)
  48. //完成归档
  49. archive.finalize()