【问题标题】:Gulp task fails because prior task doesn't create required fileGulp 任务失败,因为先前的任务没有创建所需的文件
【发布时间】:2016-09-26 17:03:21
【问题描述】:

我有一个包含各种任务的 gulp 文件。第一个任务创建一个 sass 文件,后面的任务是使用该文件。 如果我明确地运行这两个任务(gulp sass,确保创建了 sass 文件,然后运行 ​​gulp template-cache)它们就可以正常工作。

但是,当运行连接这些任务的 gulp 任务时,该任务会失败,因为尚未创建文件 template-cache 需要,即使 sass 任务已经声称已完成。 这是两个 gulp 任务:

gulp.task('sass', function(){
    sass(PATH.APP + '/**/*.scss', {sourcemap: true, style: 'expanded', compass: true})
    .pipe(autoprefixer({browsers:['last 4 versions']}))
    .pipe(sourcemaps.write())
    .on('error', sass.logError)
    .pipe(gulp.dest(PATH.APP))
    .pipe(livereload());
});

gulp.task('template-cache', function () {
    return gulp.src(PATH.APP + '/*/**/*.html')
    .pipe(templateCache({ filename:'templates.js', module:'app' }))
    .pipe(gulp.dest(PATH.DIST + '/scripts'));
});

这是执行构建的 gulp 任务:

gulp.task('default', sequence(
    ['sass', 'replace-config-local'],
    'build',
    'icons',
    'revision'
    ,'uglify'
));

这是构建任务:

gulp.task('build', sequence('clean', ['useref', 'template-cache'], 'concat', 'delete-templates'));

我得到的错误信息是:

gulp
[16:41:37] Using gulpfile ~/backoffice/gulpfile.js
[16:41:37] Starting 'default'...
[16:41:37] Starting 'sass'...
[16:41:37] Finished 'sass' after 46 ms
[16:41:37] Starting 'replace-config-local'...
[16:41:37] Finished 'replace-config-local' after 84 ms
[16:41:37] Starting 'build'...
[16:41:37] Starting 'clean'...
[16:41:37] Finished 'clean' after 14 ms
[16:41:37] Starting 'useref'...
[16:41:38] Starting 'template-cache'...
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: Error: File not found with singular glob: /home/ubuntu/backoffice/app/styles/main.css
  at DestroyableTransform.<anonymous> (/home/ubuntu/backoffice/node_modules/gulp-useref/index.js:65:28)
  at emitOne (events.js:82:20)
  at DestroyableTransform.emit (events.js:169:7)
  at emitOne (events.js:77:13)
  at DestroyableTransform.emit (events.js:169:7)
  at Glob.<anonymous> (/home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/index.js:40:16)
  at Glob.g (events.js:260:16)
  at emitOne (events.js:77:13)
  at Glob.emit (events.js:169:7)
  at Glob._finish (/home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:172:8)
  at done (/home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:159:12)
  at Glob._processSimple2 (/home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:652:12)
  at /home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:640:10
  at Glob._stat2 (/home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:736:12)
  at lstatcb_ (/home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/glob.js:728:12)
  at RES (/home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/inflight/inflight.js:23:14)
  at f (/home/ubuntu/backoffice/node_modules/gulp-useref/node_modules/vinyl-fs/node_modules/glob-stream/node_modules/glob/node_modules/once/once.js:25:25)
  at FSReqWrap.oncomplete (fs.js:82:15)

【问题讨论】:

  • 你的sass 应该返回流,否则 Gulp 不会知道它已经完成。但除此之外,我真的不明白出了什么问题。 template-cache 任务不使用 sass 任务所做的任何事情。它只查找 HTML 文件,而 sass 任务输出 CSS。他们似乎没有任何关系。似乎错误来自其他东西。
  • 感谢@MadScone,您在这两个帐户上都是对的。我们今天发现了这个bug,确实是没有返回流造成的。模板缓存不是失败的任务,而是与它并行运行的 useref 任务。如果您将评论作为答案发表,我将很乐意接受。
  • @MadScone,我将您的评论添加为答案并接受它,如果您想自己做以获得信用,我会删除我的答案。

标签: gulp gulp-sass


【解决方案1】:

正如@MadScone 在他的评论中所建议的那样,返回流解决了问题。 例如,将gulp.src(PATH.DIST + '/**') 更改为return gulp.src(PATH.DIST + '/**')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多