在 gulp 构建期间将 git commit hash 添加到 javascript 变量

Posted

技术标签:

【中文标题】在 gulp 构建期间将 git commit hash 添加到 javascript 变量【英文标题】:add git commit hash to javascript variables during gulp build 【发布时间】:2016-04-11 17:28:38 【问题描述】:

我正在使用 gulp 构建我的 angularjs 应用程序,并希望以某种方式将最新的 git commit hash 注入我的 angular 应用程序,以便在调试生产问题时使用它。

即使只是将它作为全局变量注入到我的 index.html 模板中,那也很棒。

谁能推荐一个好的技术和插件来实现这一点?

【问题讨论】:

【参考方案1】:

我最终使用了 git-rev-sync 和 gulp-replace 并将 git 放入我的 index.html 源文件中。

var git = require('git-rev-sync');

return gulp.src(pathConfig.src + 'index.html')
    .pipe($.replace('git', git.long()))
    .pipe(gulp.dest(pathConfig.dest + 'index.html'));

【讨论】:

ReferenceError: $ 未定义【参考方案2】:

注入最新的git commit hash

你可以这样做:

git 在.git/refs/heads/<branch name> 中存储最新的提交哈希。 使用以下代码读取文件的此内容,然后将其放在您需要的任何地方

# load fs for reading /writing files
fs = require("fs"),

// define your task 
gulp.task('doSometing', function() 

  return gulp.src(dirs.src + '/templates/*.html')

    // read the  SHA-1 of the latest commit
    .pipe(fs.readFile("path/to/.git/refs/heads/<branch name>", 

          // Default encoding for fs is binary so we have to set it to UTF-8      
          "utf-8", 

          // Process the data you have read (SHA-1)
          function(err, _data) 
          //do something with your data
    )
   .pipe(gulp.dest('destination/path));
);

【讨论】:

【参考方案3】:

为那些不使用 jQuery 的人跟进 @the-a-train 的回答。

var git = require('git-rev-sync');
var replace = require('git-replace');

return gulp.src(pathConfig.src + 'index.html')
  .pipe(replace('git', git.long()))
  .pipe(gulp.dest(pathConfig.dest + 'index.html'));

【讨论】:

以上是关于在 gulp 构建期间将 git commit hash 添加到 javascript 变量的主要内容,如果未能解决你的问题,请参考以下文章

React开发(144):Git Commit 规范

将当前git commit id注入Java webapp

在 .Net dll 中嵌入 git commit hash

使用 Gulp.js 将版本化和构建(缩小)文件正确提交到 GitHub

在 webpack 构建中包含 git commit hash 和 date

git查看commit提交的历史记录