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

时间:2014-02-04 08:00:06

标签: node.js glob 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']);

调用gulp dist会导致dist/目录填充正确的目录,但它们都是空的

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:

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

2 个答案:

答案 0 :(得分:158)

您需要将base option包含在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'));
});

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

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

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

答案 1 :(得分:5)

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

接受的答案使用gulp.src中的glob pattern来定位这些目录中的文件,即gulp.src(['./_locales/**/*.*', ...,(注意 double- asterisks filename.extension 星号)。接受的答案有效......

... 但接受的答案仅强调base选项

  

您需要将 base选项添加到src ...

我进行了实验并发现:

  1. 严格来说,没有必要使用base选项来实现OP所要求的内容:“......并将相应的文件移动到干净的目录中。” base选项确实确实保留了文件夹+文件 结构(如接受的答案中所述),但是{{1选项不够以OP 提出移动文件。保留文件夹+文件结构可能是OP 期望的,所以接受的答案是好的,但是......

  2. 只是重申 移动文件的内容,它是base模式:

    1. 双星号(glob)以递归方式搜索所有子文件夹和子文件夹的子文件夹等

    2. Filename.extension星号(.../**/...)查找所有名称文件以及所有扩展名所以我认为这部分值得最重视!

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

  4. 明确表达也许是一种好习惯

    如果我弄错了,请告诉我......