webpack打包生成带git commit版本信息的tar包(只需三步):nameXX-versionXX-dateXX-commitXX

最终目标:
我需要webpack打包生成以nameXX-versionXX-dateXX-commitXX这种格式命名的tar包。

1.在项目根目录下创建bin/tar.js文件

(注1:此脚本文件定义了打包规则,生成日期+commit号)

tar.js文件内容如下:

var fs = require('fs');
var path = require('path');
var shell = require('shelljs')
var moment = require('moment');
var fse = require('fs-extra')

var targz = require('targz');

var root = process.cwd();

const [, , fileTitle = 'build', jekensNumber = '0'] = process.argv;

function getLog () {
  let _cmd = `git log -1 \
  --date=iso --pretty=format:'{"commit": "%h","author": "%aN <%aE>","date": "%ad","message": "%s"},' \
  $@ | \
  perl -pe 'BEGIN{print "["}; END{print "]\n"}' | \
  perl -pe 's/},]/}]/'`
  return new Promise((resolve, reject) => {
    shell.exec(_cmd, (code, stdout, stderr) => {
      if (code) {
        reject(stderr)
      } else {
        resolve(JSON.parse(stdout)[0])
      }
    })
  })
}
async function commit () {
  let _gitLog = await getLog()
  const fileName = fileTitle + '.' + jekensNumber + '-' + moment(new Date(_gitLog.date)).format('YYYYMMDDHHmmss') + '-' + _gitLog.commit

  fse.pathExists(path.join(root, `publish/${fileName}`), (err, exists) => {
    console.log(err) // => null
    if(exists) {
      fse.remove('/tmp/myfile', err => {
        if (err) return console.error(err)
        copyAndZip(fileName)
      })
    } else {
      copyAndZip(fileName)
    }
  })
}

function copyAndZip(fileName) {
  fse.copy(path.join(root, 'dist'), path.join(root, `publish/${fileName}/${fileName}`), err => {
    if (err) return console.error(err)
    console.log('success!')
    targz.compress({
      src: path.join(root, `publish/${fileName}`),
      dest: path.join(root, `publish/${fileName}.tar.gz`),
    }, function(err){
      if(err) {
          console.log(err);
      } else {
          console.log("Done!");
          // 清除生成的临时文件夹
          fse.remove(path.join(root, `publish/${fileName}`))
      }
    });
  })
}

commit()



(注2:此脚本文件在最上方引用了shelljs,moment等插件,如果你的项目中没有的话,需要手动用npm去安装(例如npm install shelljs -D),其他安装命令自行百度)

2.在.gitignore中,将publish目录忽略掉,提交的时候就不会提到git上了

在这里插入图片描述

3.在package.json文件的scripts启动脚本后增加一行:“tar”: “node ./bin/tar.js dodbWeb-4.12.0”

(注:dodbWeb是我的项目名,4.12.0是我的项目的版本号,这些可以自定义加到最终生成的包名中,我需要最终生成dodbWeb-4.12.0-2020xxxx-commitxx的格式,如果你不需要,请自行修改)

在这里插入图片描述

大功告成,现在执行以下命令:
npm install
npm run build
npm run tar
你就会在根目录得到一个publish文件,里面生成的就是你需要的包:

在这里插入图片描述

原理:npm run build 生成正常dist文件,再运行npm run tar,意为把dist文件重新打成tar包,包名规则为bin/tar.js中定义的规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值