build.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import ora from 'ora'
  2. import fs from 'fs'
  3. import archiver from 'archiver'
  4. import { execa } from 'execa'
  5. async function runTask(taskName, task) {
  6. const s = ora().start(`${taskName} 开始打包 `)
  7. try {
  8. await task()
  9. s.succeed(`${taskName} 打包完成!`)
  10. } catch (e) {
  11. s.fail(`${taskName} 打包失败!`)
  12. console.error(`失败原因:${e.toString()}`)
  13. }
  14. }
  15. const envMap = {
  16. dev: '开发环境',
  17. test: '测试环境',
  18. prod: '生产环境',
  19. }
  20. const map = {}
  21. process.env.npm_lifecycle_script
  22. .split(' ')
  23. .filter((i) => i.includes('='))
  24. .map((obj) => {
  25. const [key, value] = obj.split('=')
  26. map[key] = value
  27. })
  28. const buildPlatform = async () => {
  29. await execa('vite', ['build', '--mode', map.mode])
  30. }
  31. ;(async () => {
  32. fs.rmSync('form.zip', { recursive: true, force: true })
  33. await runTask(`自定义表单${envMap[map.mode]}`, buildPlatform)
  34. const zipDirectory = () => {
  35. // 1. 创建 ZIP 写入流
  36. const output = fs.createWriteStream('form.zip')
  37. const archive = archiver('zip', { zlib: { level: 9 } }) // 最高压缩率
  38. // 2. 监听错误
  39. output.on('close', () => console.log(`ZIP 打包完成,大小:${archive.pointer()} 字节`))
  40. archive.on('error', (err) => console.error('压缩失败:', err))
  41. // 3. 关联输出流
  42. archive.pipe(output)
  43. // 4. 添加文件/目录
  44. archive.directory('form/', true)
  45. // 5. 完成压缩
  46. archive.finalize()
  47. }
  48. await runTask('zip', zipDirectory)
  49. })()