使用gulp选择并移动目录及其文件

mak*_*ova 96 glob node.js gulp

我目前正在使用gulp来调用bash脚本来清理我的dist/目录并将相应的文件移动到clean目录.我希望这可以用gulp完成,因为我不确定该脚本是否可以在非*nix文件系统上运行.
到目前为止,我正在使用gulp-clean模块来清理dist/目录,但是当我尝试将所需目录及其文件移动到dist文件夹时,目录为空.

var gulp = require('gulp'),
    clean = require('gulp-clean');

gulp.task('clean', function(){
  return gulp.src(['dist/*'], {read:false})
  .pipe(clean());
});

gulp.task('move',['clean'], function(){
  gulp.src(['_locales', 'icons', 'src/page_action', 'manifest.json'])
  .pipe(gulp.dest('dist'));
});

gulp.task('dist', ['move']);
Run Code Online (Sandbox Code Playgroud)

调用带有正确目录gulp distdist/目录中的结果,但它们都是空的

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:
Run Code Online (Sandbox Code Playgroud)

如何将目录及其内容复制到该dist/文件夹?

Ove*_*ous 159

您需要将base选项包含在src中,这将以您希望的方式保留文件结构:

var filesToMove = [
        './_locales/**/*.*',
        './icons/**/*.*',
        './src/page_action/**/*.*',
        './manifest.json'
    ];

gulp.task('move',['clean'], function(){
  // the base option sets the relative root for the set of files,
  // preserving the folder structure
  gulp.src(filesToMove, { base: './' })
  .pipe(gulp.dest('dist'));
});
Run Code Online (Sandbox Code Playgroud)

此外,如果您在项目的根目录中拥有所有这些源文件,那么您可能会遇到麻烦.

如果可以的话,我建议您使用单个src/文件夹并将所有特定于应用程序的文件移到那里.这使维护更容易前进,并防止特定于构建的文件与特定于应用程序的文件混淆.

如果您这样做,那么只需在上面的示例中替换所有出现的./with src/.

  • 要做相反的事情,请使用gulp-flatten.http://stackoverflow.com/questions/21153338/flatten-glob-down-to-one-directory?rq=1 (2认同)
  • 作为执行此操作的其他任何人的注释,请确保您没有将src中的`read`选项设置为`false`(默认设置为`true`). (2认同)
  • 当我这样做时,它正在复制整个根目录. (2认同)

The*_*Pea 5

原始问题仅针对其中的目录 (也称为文件夹)gulp.src,即gulp.src(['_locales', ...在此示例中,_locales目录的名称.

接受的答案 在其目标文件中使用了一种glob模式,即(注意双星号filename.extension星号).接受的答案有效......gulp.srcgulp.src(['./_locales/**/*.*', ...

...... 但接受的答案只强调了base选项:

你需要在src中加入base选项 ......

我试验并发现:

  1. 严格来说,没有必要使用该base选项来实现OP所要求的内容:"......并将适当的文件移动到干净的目录中." 该base选项确实保留文件夹+文件 结构(如接受的答案所述),但base选项是不充分的OP移动的文件要求.保留文件夹+文件结构可能是OP所期望的,所以接受的答案是好的,但......

  2. 只是为了重申移动文件,它的glob模式:

    1. Double-asterisk(.../**/...)在所有子文件夹和子文件夹的子文件夹等中递归搜索.

    2. Filename.extension asterisks(.../*.*)查找所有名称和所有扩展名的文件.所以我觉得这部分值得最重视!

  3. 接受的答案改变了别的东西; 它./为传递给的每个路径参数添加了前缀gulp.src.我认为这是不必要/多余的; 如果没有./,(如在OP问题中),相对于当前目录解析路径 - 导致相同的行为.但也许这是好的做法,明确与./

如果我错了,请告诉我