美文网首页
每次打包之后,记录打包的时间、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