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


98

我目前正在使用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/文件夹?

Answers:


162

您需要包括src base选项,该选项将以所需的方式保留文件结构:

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
仅在重组文件后才能完美工作,但是您的推理是正确的,因此我将您的回答标记为正确。谢谢。
makenova 2014年

2
要执行相反的操作,请使用gulp-flatten。stackoverflow.com/questions/21153338/...
托尼·古铁雷斯

2
作为对执行此操作的其他用户的说明,请确保您没有将readsrc中的选项设置为falsetrue默认情况下设置为)。
yndolok 2014年

3
当我这样做时,它将复制整个根目录。
Nomadme

5

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

接受的答案 在其目录中使用glob模式gulp.src文件定位到那些目录中的任何位置gulp.src(['./_locales/**/*.*', ...(即(注意,双星号filename.extension星号))。接受的答案有效...

... 但是可接受的答案仅强调以下base选项

您需要包括的base选项为src ...

我经过实验发现:

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

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

    1. 双星号(.../**/...)在所有子文件夹以及子文件夹的子文件夹等中进行递归搜索。

    2. Filename.extension星号(.../*.*)查找具有所有名称和所有扩展名的文件因此,我认为这部分应该得到最大的重视!

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

让我知道我是否记错了...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.