gulp.lastrun仅在调用done()函数后才返回值

时间:2016-12-18 11:26:49

标签: gulp

最近我开始使用Gulp 4.在我的gulpfile中,我有一个简单的任务:

gulp.task('example',
    gulp.series(function(done) {
        console.log(gulp.lastRun('example'));
        done();
        console.log(gulp.lastRun('example'));
    })
);

它应该打印标记任务上次执行两次的时间戳。确实如此,但每次运行任务时,只有在调用done()函数后才定义时间戳。输出类似于:

[12:00:25] Using gulpfile c:\xampp\htdocs\gulp\gulpfile.js
[12:00:25] Starting 'example'...
[12:00:25] Starting '<anonymous>'...
undefined
[12:00:25] Finished '<anonymous>' after 2.14 ms
[12:00:25] Finished 'example' after 4.39 ms
1482058825484

因此,我第一次尝试获取lastRun时间戳时未定义,第二次返回当前运行的时间戳(因为done()已被调用)。如何获得实际的上次运行时间戳?

编辑:

我创建此示例任务仅用于确定lastRun的工作方式。 “现实生活”的任务将是这样的:

gulp.task('scripts',
    gulp.series(function scriptsInternal() {
        return gulp.src('src/scripts/**/*.js', {since: gulp.lastRun('scripts')})
            .pipe(cached('ugly'))
            .pipe(uglify())
            .pipe(remember('ugly'))
            .pipe(concat('main.min.js'))
            .pipe(gulp.dest('dist/scripts'));
        })
);

在这种情况下,lastRun('scripts')也会返回undefined。至少我想是这样,因为任务需要2秒才能完成,我是否使用since选项。 Here是另一个应该有效的示例任务,但是它可以吗?

1 个答案:

答案 0 :(得分:1)

再次回答我自己的问题。

lastRun()调用无法正常工作,因为只要gulp正在运行,它就会返回正确的时间戳。使用以下命令手动执行任务时:

>gulp [task name]

命令,gulp启动但很快就会终止(在任务完成时)。这样,lastRun时间戳不会被记住&#34;。每次运行任务时,都会启动另一个gulp进程。

要使lastRun正常工作,您需要一名观察员。观察者将在后台运行并在更改glob的文件时触发example任务。由于观察者不会在任务完成时停止,因此gulp将记住上次运行时间戳。