最近我开始使用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是另一个应该有效的示例任务,但是它可以吗?
答案 0 :(得分:1)
再次回答我自己的问题。
lastRun()
调用无法正常工作,因为只要gulp正在运行,它就会返回正确的时间戳。使用以下命令手动执行任务时:
>gulp [task name]
命令,gulp启动但很快就会终止(在任务完成时)。这样,lastRun
时间戳不会被记住&#34;。每次运行任务时,都会启动另一个gulp进程。
要使lastRun
正常工作,您需要一名观察员。观察者将在后台运行并在更改glob的文件时触发example
任务。由于观察者不会在任务完成时停止,因此gulp将记住上次运行时间戳。