Gulp任务-无法设置变量值

缺口

我正在使用git-revgulp-headerrun-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"
};

我说的是提交,而不是时间戳。稍后我将担心时间戳。

知道我在做什么错吗?

谢谢

斯文·舍嫩(Sven Schoenung)

您的Gulpfile有几处错误:

  1. 您的banner变量初始化之前您的任何任务,甚至定义,更不用说已经被执行。那意味着在您初始化时commit仍然如此undefinedbanner
  2. gulp.task期望功能作为任务主体。但是任务身体get-git-info在你的Gulpfile是getGitInfo()这意味着您将执行getGitInfo函数,并将该函数调用返回值分配为的任务主体get-git-info您的情况是undefined
  3. 即使您已将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/'))
});
  1. banner现在是一个函数,因此commit只有在初始化变量后才能访问变量。
  2. getGitInfo离开了。而是使用匿名函数作为的任务主体get-git-info,因此很明显我们实际上是在此处分配一个函数。
  3. 匿名函数接受一个回调done,一旦提交ID可用,该回调将被调用。这表明get-git-info已经完成并且runSequence可以继续执行add-header任务的吞噬。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用gradle任务在jar中设置变量值

来自分类Dev

仅在 ExecutorService 中提交任务时设置变量值

来自分类Dev

无法在emacs中设置变量值?

来自分类Dev

如何从GULP将变量值注入JS文件

来自分类Dev

根据NODE_ENV设置gulp任务

来自分类Dev

链接gulp任务并传递变量

来自分类Dev

如何将环境变量设置为gulp任务?

来自分类Dev

无法在回调中设置变量值

来自分类Dev

无法在静态字段中设置变量值

来自分类Dev

Web API-使用Gulp任务动态设置端点地址

来自分类Dev

为什么我的Gulp构建任务设置不正确?

来自分类Dev

代理URL无法与BrowserSync Gulp任务一起使用

来自分类Dev

Gulp任务无法访问karma.conf.js文件

来自分类Dev

具有先决条件的Gulp任务无法启动

来自分类Dev

Visual Studio Task Runner Explorer 无法识别 gulp 任务

来自分类Dev

Azure Devops如何在任务中获取安全的变量值

来自分类Dev

PHP定义不设置变量值

来自分类Dev

Thymleaf,设置为属性的变量值

来自分类Dev

KineticJS在事件上设置变量值

来自分类Dev

PHP定义不设置变量值

来自分类Dev

简单的scanf不会设置变量值

来自分类Dev

laravel设置类变量值

来自分类Dev

如何从列数据设置变量值?

来自分类Dev

通过函数设置窗口变量值

来自分类Dev

将变量值设置为for循环

来自分类Dev

如何在 If 中设置变量值

来自分类Dev

Ajax 成功未设置变量值

来自分类Dev

如何从输入设置变量值?

来自分类Dev

Jenkins脚本化管道:无法在Shell中打印变量并在Shell中设置变量值