我正在使用git-rev
,gulp-header
并run-sequence
尝试在构建过程中将一些信息-以及git commit number自动添加到app.js文件中。
这是我到目前为止的代码:
var runSequence = require('gulp-run-sequence');
var git = require('git-rev');
var header = require('gulp-header');
var pkg = require('./info.json');
var paths = {addHeader: ['./www/js/app.js'], ...}
var commit, timestamp;
function getGitInfo() {
git.short(function (str) {
commit = str;
console.log(str);
});
};
var banner = ['"commit":"' + commit + '",',
'"timestamp":"' + timestamp + '",',
'"appVersion":"<%= pkg.appVersion %>",',
'"appReleaseDate":"<%= pkg.appReleaseDate %>"',
'};\n',
''].join('\n');
gulp.task('get-git-info', getGitInfo());
gulp.task('add-header', function () {
return gulp.src(paths.addHeader)
.pipe(header(banner, {pkg: pkg}))
.pipe(gulp.dest('./www-dev/js/'))
});
gulp.task('build', function (){
runSequence('get-git-info','add-header');
})
控制台结果是正确的,我有提交号,但是在app.js中,我得到的是未定义的:
aboutPage={
"appVersion":"5.0.0",
"appReleaseDate":"10/02/2016",
"commit":"undefined",
"timestamp":"undefined"
};
我说的是提交,而不是时间戳。稍后我将担心时间戳。
知道我在做什么错吗?
谢谢
您的Gulpfile有几处错误:
banner
变量初始化之前您的任何任务,甚至定义,更不用说已经被执行。那意味着在您初始化时commit
仍然如此。undefined
banner
gulp.task
期望功能作为任务主体。但是任务身体get-git-info
在你的Gulpfile是getGitInfo()
。这意味着您将执行该getGitInfo
函数,并将该函数调用的返回值分配为的任务主体get-git-info
。您的情况是undefined
。getGitInfo
函数本身分配为任务主体(而不是其返回值),但由于git.short()
是异步的,它仍然无法工作。这意味着get-git-info
返回并在使用commit-id调用回调函数to之前add-header
运行。git.short()
这是解决所有这三个问题的解决方案:
function banner() {
return [
'"commit":"' + commit + '",',
'"timestamp":"' + timestamp + '",',
'"appVersion":"<%= pkg.appVersion %>",',
'"appReleaseDate":"<%= pkg.appReleaseDate %>"',
'};\n',
''
].join('\n');
}
gulp.task('get-git-info', function(done) {
git.short(function (str) {
commit = str;
console.log(str);
done();
});
});
gulp.task('add-header', function () {
return gulp.src(paths.addHeader)
.pipe(header(banner(), {pkg: pkg}))
.pipe(gulp.dest('./www-dev/js/'))
});
banner
现在是一个函数,因此commit
只有在初始化变量后才能访问该变量。getGitInfo
离开了。而是使用匿名函数作为的任务主体get-git-info
,因此很明显我们实际上是在此处分配一个函数。done
,一旦提交ID可用,该回调将被调用。这表明get-git-info
已经完成并且runSequence
可以继续执行add-header
任务的吞噬。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句