美文网首页
每次打包之后,记录打包的时间、commitId等信息

每次打包之后,记录打包的时间、commitId等信息

作者: 日不落000 | 来源:发表于2021-01-04 17:45 被阅读0次

根据不同的应用场景,打包之前可以把代码手动或自动推送到远端,防止代码丢失

每次打包之后,记录打包的时间、commitId等信息

  • package.json
  "scripts": {
    "start": "node scripts/start.js",
    "build": "node scripts/build.js",
    "buildInfo": "node scripts/buildInfo.js",
    "test": "node scripts/test.js"
  },

  • scripts/buildInfo.js
/**
 * 打包之前可以把代码都推送到远端,防止代码丢失
 * 每次打包之后,记录打包的时间、commitId等信息
 */


// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'production';
process.env.NODE_ENV = 'production';

var moment = require('moment') // todo 需要安装这个依赖

var async = require('async')
var exec = require('child_process').exec
var fs = require('fs')

var assetsFileName = ''
var commitId = ''
var date = moment.utc()
var version = date.format('YYYY-MM-DDTHH:mm:ss') + 'Z'
var releaseTag = date.format('YYYY-MM-DDTHH-mm-ss') + 'Z'
var buildType = 'production'

const rmDir = function(dirPath) {
  try { var files = fs.readdirSync(dirPath); }
  catch(e) { return; }
  if (files.length > 0)
    for (var i = 0; i < files.length; i++) {
      var filePath = dirPath + '/' + files[i];
      if (fs.statSync(filePath).isFile())
        fs.unlinkSync(filePath);
      else
        rmDir(filePath);
    }
  fs.rmdirSync(dirPath);
};

async.waterfall([
    function(cb) {
      rmDir('build');
      //  var cmd = 'webpack -p --config webpack.production.config.js'
      var cmd = 'node scripts/build.js' //todo  改成对应项目的打包命令
      console.log('Running', cmd)
      exec(cmd, cb)
    },
    function(stdout, stderr, cb) {
      var cmd = 'git log --format="%H" -n1'
      console.log('Running', cmd)
      exec(cmd, cb)
    },
    function(stdout, stderr, cb) {
      console.log('stdout',stdout)
      if (!stdout) throw new Error('commitId is empty')
      commitId = stdout.replace('\n', '')
      if (commitId.length !== 40) throw new Error('commitId invalid : ' + commitId)
      assetsFileName = 'ui-assets-release.txt';

      fs.appendFileSync(assetsFileName, '\n')
      fs.appendFileSync(assetsFileName, 'var UIReleaseTag = "' + buildType + '.' +
                        releaseTag + '"\n')
      fs.appendFileSync(assetsFileName, 'var UICommitID = "' + commitId + '"\n')
      fs.appendFileSync(assetsFileName, 'var UIVersion = "' + version + '"')
      fs.appendFileSync(assetsFileName, '\n')
      console.log('UI assets file :', assetsFileName)
      cb()
    }
  ], function(err) {
    if (err) return console.log(err)
  })

  • 打包并记录打包时间到ui-assets-release.txt文件
npm run buildInfo
☁  my-app [master] ⚡ npm run buildInfo

> my-app@0.1.0 buildTag /***/my-app
> node scripts/buildInfo.js

Running node scripts/build.js
Running git log --format="%H" -n1
stdout 3d9a619cfd60120f2e94a89ffa3a5ff53162a837

UI assets file : ui-assets-release.txt
☁  my-app [master] ⚡
  • ui-assets-release.txt
var UIReleaseTag = "production.2021-01-04T07-53-59Z"
var UICommitID = "3d9a619cfd60120f2e94a89ffa3a5ff53162a837"
var UIVersion = "2021-01-04T07:53:59Z"

相关文章

网友评论

      本文标题:每次打包之后,记录打包的时间、commitId等信息

      本文链接:https://www.haomeiwen.com/subject/bkuvoktx.html