【问题标题】:Gulp Bower error on default task with Libsass & Susy使用 Libsass 和 Susy 执行默认任务时出现 Gulp Bower 错误
【发布时间】:2015-04-04 17:40:41
【问题描述】:

当我第一次运行 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。

style.scss

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

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

但它看起来有点乱,有什么想法可以防止这种情况发生吗?

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

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

【问题讨论】:

    标签: gulp bower susy gulp-sass


    【解决方案1】:

    在这一行

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

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

    要在 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 之前执行。您可能面临的一个问题:每次执行sass 时都运行bower。这就是为什么我们将使用gulp-changed 来防止重新运行。

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

    希望对你有帮助

    【讨论】:

    • 谢谢,添加任务依赖解决了这个问题。但是,当我在组合中添加gulp-changed 时,会出现另一个错误:TypeError: Cannot read property 'mtime' of null。我不知道这个插件,它看起来很有用。所以我要看看你能不能让它工作。感谢您的帮助!
    • 这可能是gulp-changed 不起作用的原因:github.com/sindresorhus/gulp-changed/issues/27
    • 啊,很公平。 gulp-newer 可能也是您可能感兴趣的一个插件:npmjs.com/package/gulp-newer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多