0

当我gulp第一次运行该任务(默认)时,该sass任务在 Bower 包上出现错误。更具体地说是关于Susy

错误:

Plumber found unhandled error:
   Error in plugin 'gulp-sass'
   Message:
      file to import not found or unreadable: su/utilities
   Current dir: /Users/Jeroen/sites/gulp/bower_components/susy/sass/susy/

使用 gulp -bower成功安装了 Susy bower 包,并从我的 bower.json 文件中获取其信息。但是,当默认任务到达sass任务时,却找不到Susy。

样式.scss

@import "../bower_components/susy/sass/susy";

这只发生在我第一次跑步gulp时。出现watch此错误后任务不会停止/中断,并且会继续工作。(我可以毫无问题地编译 sass)。

但它看起来有点乱,关于如何防止这种情况的任何想法?

你可以在这里看到我的整个 gulpfile.js: https ://gist.github.com/JeroenDelbrk/798d646af5cc2ad78da0

也欢迎与此问题无关的有关如何改进 gulpfile 的提示。

4

1 回答 1

0

在这一行

gulp.task('default', ['bower', 'sass', 'scripts', 'imagemin', 'iconfont', 'watch']);

所有任务都在并行执行。如果您没有任何依赖关系,那很好。但是,从您的解释来看,成功运行sass很大程度上取决于成功执行bower. 在您运行时sassbower可能还没有完成,因此没有提供您需要的文件。

要在 Gulp 3.* 中解决这个问题,您需要正确连接您的依赖项。我建议如下:

// Define plugins
var gulp = require('gulp'),
    gulpLoadPlugins = require('gulp-load-plugins');
    $ = gulpLoadPlugins();

gulp.task('bower', function() {
  return $.bower()
    .pipe(gulp.dest('./bower_components'))
});

// Sass compile + prefix task
gulp.task('sass', ['bower'], function(){
  ...
});



// Default Task
gulp.task('default', ['sass', 'scripts', 'imagemin', 'iconfont']);

// Watch Task
gulp.task('watch', ['default'], function(){
  gulp.watch('sass/**/*.scss', ['sass']);
  gulp.watch('js/*.js', ['scripts']);
  gulp.watch('originals/*', ['imagemin']);
  gulp.watch('icons/*.svg', ['iconfont']);
});

和 ruf gulp watch。这将执行所有可以同时并行运行的任务,但 bower 将在 sass 之前执行。您可能面临的一个问题:bower每次执行sass. 这就是为什么我们将使用它gulp-changed来防止重新运行。

gulp.task('bower', function() {
  return $.bower()
    .pipe(changed('./bower_components'))
    .pipe(gulp.dest('./bower_components'))
});

希望这可以帮助

于 2015-04-04T19:54:40.513 回答