【问题标题】:Gulp + Sass + Del - Random behaviourGulp + Sass + Del - 随机行为
【发布时间】:2015-07-14 07:33:57
【问题描述】:

我不明白为什么这个简单的脚本会因del 插件设置而有所不同。

当我启动 gulp sass 时,我只想清理 public/css 目录并从 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)

【问题讨论】:

  • 你有什么理由binddelnull

标签: javascript node.js gulp gulp-sass


【解决方案1】:

tl;dr

如果没有提供回调,Gulp 不知道del 何时完成。有或没有bind,如果您的sass 任务在del 之前运行并且要删除的文件确实存在,则del 会每隔一段时间工作一次。


根据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 何时完成。根据documentation

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2015-12-09
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    相关资源
    最近更新 更多