vue项目打包时按一定的名称规范生成对应的压缩包

在项目部署中经常需要将打包的dist按一定的名称压缩成压缩包,今天记录一下打包时生成压缩包的过程。其中有用到的npm包需要自己安装一下。

js文件放置的目录如下

compress.js内容如下:

// compress.js

import fs from "fs";
import shell from "shelljs"
import minimist from "minimist"
import archiver from "archiver"
import {useNow, useDateFormat} from '@vueuse/core'


/**
 * 压缩文件夹
 * @param sourceFolder 待压缩文件夹
 * @param destZip  压缩后zip文件路径 文件名
 * @param cb 回调函数
 * @param subDir 是否包一层原文件名
 */
function zipFolder(sourceFolder, destZip, cb, subDir) {
  let output = fs.createWriteStream(destZip),
    archive = archiver('zip', {zlib: {level: 9}});

  output.on('close', () => {
    cb(destZip, '文件压缩成功');
  })
  output.on('error', (err) => {
    cb(err)
  })

  archive.pipe(output);
  archive.directory(sourceFolder, subDir ? sourceFolder : false);
  archive.finalize();
}

/**
 * git log
 * @returns {Promise<unknown>}
 */
function getLog() {
  let _cmd = `git show -s --format=%H`;
  return new Promise((resolve, reject) => {
    shell.exec(_cmd, (code, stdout, stderr) => {
      if (code) {
        reject(stderr)
      } else {
        resolve(stdout)
      }
    })
  })
}

async function toZip() {
  // eslint-disable-next-line no-undef
  const args = minimist(process.argv.slice(2));
  let _gitLog = await getLog();
  let date = useDateFormat(useNow(), 'YYMMDD'),
    commit = _gitLog.substring(0, 8),
    pre = args.pre || '', //项目前缀
    version = args.version || '',//版本号
    beta = args.beta || '',//测试版
    subDir = args.subDir,//压缩是否套一层输出的文件夹 不是设置这个参数即不包一层原文件夹
    sourceFolder = args.output || 'dist',//打包输出的文件夹
    destZip = `${pre}-WEB-${version}-${commit}${beta && `-${beta}`}-${date.value}.zip`;
  zipFolder(sourceFolder, destZip, (err, msg) => {
    console.log(err, msg)
  }, subDir);
}

toZip();

最后还需要配置一下package.json, 如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值