代码之家  ›  专栏  ›  技术社区  ›  Nick

gulp-src-在执行任务时不复制文件夹

  •  0
  • Nick  · 技术社区  · 6 年前

    我知道这听起来很简单,但我已经挣扎了很长一段时间,没有真正的结果。

    我正试图用watch命令将一些文件夹从复制中排除出来。 我已经跟踪了 this example (除其他外)但它的行为似乎不像预期的那样。

    基本上,文件夹结构如下:

    - src
    | - assets
    | -  -  _scripts/*
    | -  -  _styles/*
    | -  -  fonts/*
    | -  -  images/*
    | - index.html
    | - favicon.ico
    

    我要运行的任务如下:

    gulp.task('copy', () => {
     return gulp.src(['src/**/*', '!src/assets/_*/**/*'])
       .pipe(gulp.dest('./www'))
    });
    

    我想复制里面所有的文件 src/ 除了 ./src/assets/_styles ./src/assets/_scripts 但当任务运行时,这两个文件夹将被复制为空文件夹(它们不应该这样做,如上面的文章)。

    为了便于将来参考,上面的文章说:

    ---> for this folder structure:
    
    file.txt
    folder
    folder/file.txt
    folder/_subfolder
    folder/_subfolder/file.txt
    folder/subfolder
    folder/subfolder/file.txt
    _folder
    _folder/file.txt
    _folder/_subfolder
    _folder/_subfolder/file.txt
    _folder/subfolder
    _folder/subfolder/file.txt
    
    ---> when using this task:
    
    gulp.task('default', function() {
      return gulp.src([
          'src/**/*',         //select all files
          '!src/**/_*/',      //exclude folders starting with '_'
          '!src/**/_*/**/*',  //exclude files/subfolders in folders starting with '_'
        ])
        .pipe(gulp.dest('dist'));
    });
    
    ---> the result will be:
    
    file.txt
    folder
    folder/file.txt
    folder/subfolder
    folder/subfolder/file.txt
    

    Gulp的版本如下:

    CLI版本3.9.1

    本地版本3.9.1

    我要阻止他们被复制过来吗?

    谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   Mark    6 年前

    尝试:

    gulp.task('copy', () => {
      return gulp.src(['src/**/*.*', '!src/assets/_*/**/*.*'])
        .pipe(gulp.dest('dist'))
    });
    

    [编辑]:您也可以使用 nodir 使用您的原始glob选项:

    gulp.task('copy', () => {
      // return gulp.src(['src/**/*.*', '!src/assets/_*/**/*.*'])
      return gulp.src(['src/**/*', '!src/assets/_*/**'], {nodir: true})
        .pipe(gulp.dest('dist'))
    });
    

    glob options including nodir

        2
  •  0
  •   Hardik Shah    6 年前

    你应该同时用这个 !src/**/_* '还有这个 !src/assets/_*/**/*

    试试这个:

    gulp.task('copy', () => {
        return gulp.src(['src/**/*', '!src/**/_*/', '!src/assets/_*/**/*'])
        .pipe(gulp.dest('./www'))
    });
    

    希望这对你有帮助。