12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import ora from 'ora'
- import fs from 'fs'
- import archiver from 'archiver'
- import { execa } from 'execa'
- async function runTask(taskName, task) {
- const s = ora().start(`${taskName} 开始打包 `)
- try {
- await task()
- s.succeed(`${taskName} 打包完成!`)
- } catch (e) {
- s.fail(`${taskName} 打包失败!`)
- console.error(`失败原因:${e.toString()}`)
- }
- }
- const envMap = {
- dev: '开发环境',
- test: '测试环境',
- prod: '生产环境',
- }
- const map = {}
- process.env.npm_lifecycle_script
- .split(' ')
- .filter((i) => i.includes('='))
- .map((obj) => {
- const [key, value] = obj.split('=')
- map[key] = value
- })
- const buildPlatform = async () => {
- await execa('vite', ['build', '--mode', map.mode])
- }
- ;(async () => {
- fs.rmSync('form.zip', { recursive: true, force: true })
- await runTask(`自定义表单${envMap[map.mode]}`, buildPlatform)
- const zipDirectory = () => {
- // 1. 创建 ZIP 写入流
- const output = fs.createWriteStream('form.zip')
- const archive = archiver('zip', { zlib: { level: 9 } }) // 最高压缩率
- // 2. 监听错误
- output.on('close', () => console.log(`ZIP 打包完成,大小:${archive.pointer()} 字节`))
- archive.on('error', (err) => console.error('压缩失败:', err))
- // 3. 关联输出流
- archive.pipe(output)
- // 4. 添加文件/目录
- archive.directory('form/', true)
- // 5. 完成压缩
- archive.finalize()
- }
- await runTask('zip', zipDirectory)
- })()
|