【问题标题】:Gulp globbing excluding files then unexcluding not working as describedGulp globbing 排除文件然后不排除不按描述工作
【发布时间】:2016-06-06 18:11:30
【问题描述】:

如果我有文件

client/
  a.js
  bob.js
  bad.js

还有 gulp 任务

gulp.task('copy', function() {
  return gulp.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
             .pipe(gulp.dest('public'));
});

那么根据documentation我们应该复制a.jsbad.js。但是,当我使用 gulp v3.9.1 运行它时,它只会复制 a.js

这是一个已知的错误吗?有没有办法做到这一点?

【问题讨论】:

    标签: gulp gulp-glob


    【解决方案1】:

    这不是错误,只是文档有误。 gulp 的最新版本是gulp@3.9.1,它使用vinyl-fs@0.3.14behavior you're referring to 直到 vinyl-fs@1.0.0 才被引入。

    事实上,在 gulp 文档 explicitly state 的其他地方,全局排序将成为 gulp@4.0.0 中的一个新功能:

    传递给 gulp.src 的 glob 将按顺序进行评估,这意味着这是可能的 gulp.src(['*.js', '!b*.js', 'bad.js'])(排除所有以 b 开头的 JS 文件,除了 bad.js)

    这意味着您可以简单地使用当前的 gulp 开发版本 (gulpjs/gulp#4.0) 并利用新功能。但是请注意,在定义任务时,gulp 4.x 是来自 gulp 3.x 的 radically different

    一种解决方法是继续使用 gulp 3.x 进行任务定义,但使用最新版本的 vinyl-fs 创建乙烯基流:

    var vinylFs = require('vinyl-fs');
    
    gulp.task('copy', function() {
      return vinylFs.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
        .pipe(vinylFs.dest('public'));
    });
    

    如果您不想这样做,您可以随时使用merge-stream 将多个流合并为一个流:

    var merge = require('merge-stream');
    
    gulp.task('copy', function() {
      return merge(gulp.src(['client/*.js', '!client/b*.js']),
                   gulp.src(['client/bad.js']))
        .pipe(gulp.dest('public'));
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2011-07-21
    • 2022-07-27
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多