zip.js 1.7 KB

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