Gulp + Sass + Del - 随机行为

时间:2015-07-14 07:33:57

标签: javascript node.js gulp gulp-sass

我不明白为什么这个简单脚本的行为会有所不同,具体取决于del插件设置。

当我启动gulp sass时,我只想清理public/css dir和"编译"来自sass的css。到目前为止一切顺利:

gulp.task('clean-css', del.bind(null,['./public/css']));

gulp.task('sass', ['clean-css'], function () {
  return gulp.src('./resources/sass/**/*.scss')
    .pipe(plugins.sass({outputStyle: 'compressed'})) 
    .pipe(gulp.dest('./public/css'));
});

但是,如果将clean-css任务更改为:

gulp.task('clean-css', del(['./public/css']));

然后它每隔一段时间才有效。第一个清理并生成css,下一个删除目录但不生成任何内容。

那么,del(['./public/css'])del.bind(null,['./public/css'])之间的区别是什么?为什么它会以这种方式影响脚本?

更新 它没有产生任何我看到此错误的时间:

events.js:141
      throw er; // Unhandled 'error' event
            ^
Error: ENOENT: no such file or directory, open 'C:\Users\XXXX\gulp-project\public\css\style.css'
    at Error (native)

1 个答案:

答案 0 :(得分:0)

<强> TL;博士

如果没有提供回调,Gulp不知道del何时结束。如果bind任务在del之前运行,并且要删除的文件确实存在,则无论有没有sassdel都会一直有效。

根据gulp documentation,您还应该向del提供回调方法。任务完成时,这是how gulp knows

var gulp = require('gulp');
var del = require('del');

gulp.task('clean:mobile', function (cb) {
  del([
    'dist/report.csv',
    // here we use a globbing pattern to match everything inside the `mobile` folder
    'dist/mobile/**/*',
    // we don't want to clean this file though so we negate the pattern
    '!dist/mobile/deploy.json'
  ], cb);
});

gulp.task('default', ['clean:mobile']);

我认为每次运行任务的顺序都不同,因为当没有提供回调时,gulp不知道del何时完成。根据{{​​3}}:

  

如果要创建一个以特定顺序运行任务的系列,您需要做两件事:

     
      
  1. 在任务完成时给它一个暗示告诉它,
  2.   
  3. 并提示任务取决于另一个任务的完成情况。
  4.