我正在通过一个关于gulp的复数课程.John Papa正在演示如何将一个删除现有css文件的函数注入到编译新文件的例程中.
del函数的回调没有触发.del函数正在运行,文件被删除,我看不到任何错误消息.如果我手动调用回调它会执行,所以看起来函数是完整的.所以我想知道什么会导致del不想执行回调.
删除例程:
function clean(path, done) {
log('cleaning ' + path);
del(path, done); // problem call
}
Run Code Online (Sandbox Code Playgroud)
'done'函数没有触发,但如果我将代码更改为:
function clean(path, done) {
log('cleaning ' + path);
del(path);
done();
}
Run Code Online (Sandbox Code Playgroud)
当然,在继续之前,这样做会使得等到del完成之前的目的无效.
任何有关正在发生的事情的想法都将受到赞赏.
供参考(如有相关):
编译css函数:
gulp.task('styles', ['clean-styles'], function(){
log('compiling less');
return gulp
.src(config.less)
.pipe($.less())
.pipe($.autoprefixer({browsers:['last 2 versions', '> 5%']}))
.pipe(gulp.dest(config.temp));
});
Run Code Online (Sandbox Code Playgroud)
注入清洁功能:
gulp.task('clean-styles', function(done){
var files = config.temp + '/**/*.css';
clean(files, done);
});
Run Code Online (Sandbox Code Playgroud)
UPDATE
如果有其他人遇到这个,重新观看了培训视频,它正在使用del的v1.1.我查了一下,我正在使用2.x. 安装v 1.1后所有工作.
gfp*_*eco 23
del不是Node的命令,它可能就是这个 npm包.如果是这种情况,它不会收到回调作为第二个参数,而是返回一个promise,你应该调用.then(done)以在del完成后调用它.
更新
更好的解决方案是接受Gulp的承诺性质:
将您的clean功能更改为:
function clean(path) {
return del(path); // returns a promise
}
Run Code Online (Sandbox Code Playgroud)
你的clean-styles任务是:
gulp.task('clean-styles', function(){
var files = config.temp + '/**/*.css';
return clean(files);
});
Run Code Online (Sandbox Code Playgroud)
Vit*_*kov 12
从版本2.0开始,del的API更改为使用promises.
因此,要指定回调,您应该使用.then():
del('unicorn.png').then(callback);
Run Code Online (Sandbox Code Playgroud)
如果您需要从gulp任务中调用它 - 只需从任务中返回一个promise:
gulp.task('clean', function () {
return del('unicorn.png');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4577 次 |
| 最近记录: |