git - 尝试在 grunt 中获取 git 提交 ID

标签 git gruntjs

我希望 git commit ID 成为我创建的 zip 文件的一部分。我正在尝试使用 grunt-git-rev-parse 但运气不佳。我的 zip 文件是 name-.zip 而不是 name-3A5BC3.zip。我如何将 git commit ID 添加到我的文件名中?

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    "git-rev-parse": {
      options: {
        prop: 'git-revision',
        number: 6
      }
    },

    jshint: { 
      options: {
        curly: true,
        eqeqeq: true,
        eqnull: true,
        browser: true,
        globals: {
          jQuery: true
        },
      },
      all: ['gruntfile.js', 'public/javascripts/**/*.js'],
    },

    bower: {
      install: {
        options: {
          install: true,
          copy: false
        }
      }
    },

    jade: {
      compile: {
        options: {
          data: {
            debug: false
          }
        },
        files: {
          "build/html/index.html": ["src/jade/index.jade"],
          "build/html/login.html": ["src/jade/login.jade"]
        }
      }
    },

    stylus: {
      compile: {
        options: {
          urlfunc: 'embedurl'
        },
        files: {
          'build/css/site.css': ['src/stylus/site.styl']
        }
      }
    },

    uglify: {
      options: {
        mangle: false,
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n'
      },
      dist: {
        files: {
          'build/js/<%= pkg.name %>.min.js': ['public/javascripts/**/*.js',
            'bower_components/angulartics/src/angulartics.js',
            'bower_components/angulartics/src/angulartics-google-analytics.js']
        }
      }
    },

    compress: {
      main: {
        options: {
          archive: "<%= pkg.name %>-<%= grunt.config.get('git-revision') %>.zip",
          mode: 'zip',
          pretty: true
        },
        files: [
          {expand: true, cwd: 'build/', src: ['**/*']}
        ]
      }
    }
  });


  grunt.loadNpmTasks('grunt-bower-task');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-jade');
  grunt.loadNpmTasks('grunt-contrib-stylus');
  grunt.loadNpmTasks('grunt-contrib-compress');
  grunt.loadNpmTasks('grunt-git-rev-parse');


  grunt.registerTask('test',  ['jshint']);
  grunt.registerTask('build', ['bower', 'jade', 'stylus', 'uglify']);
  grunt.registerTask('pkg', ['git-rev-parse', 'compress:main']);
};

最佳答案

您错过了 grunt-git-rev-parse 任务的多任务目标,因此它从未运行。 :-)

"git-rev-parse": {
  build: {
    options: {
      prop: 'git-revision',
      number: 6
    }
  }
}

不是你的错,因为这个特定插件的文档对此不清楚,但始终确保你可以在不指定多任务目标的情况下获得输出。如果不能,添加一个通常可以解决问题(您可以随时检查源代码以确保它是多任务还是单任务)。

关于git - 尝试在 grunt 中获取 git 提交 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20102447/

相关文章:

git - 每个 git commit/git stash 都要求我输入密码

css - grunt-contrib-cssmin 移除了 box-sizing 属性

javascript - 自定义 grunt 任务命名约定

git - 如何在不创建本地分支的情况下创建远程 Git 分支?

git - 为什么 git fetch 不创建本地分支?

git - 如何重新推送 Git 上的固定提交?

git - 如何跨不同构建工具管理发布版本?

javascript - 使用 grunt 构建整个 Angular 项目

javascript - Gruntfile 任务未正常运行

javascript - 在 grunt/requirejs 构建期间设置/取消设置调试标志