【问题标题】:Use gulp to select and move directories and their files使用 gulp 选择和移动目录及其文件
【发布时间】:2014-02-28 02:15:56
【问题描述】:

我目前正在使用 gulp 调用一个 bash 脚本来清理我的 dist/ 目录并将适当的文件移动到干净的目录中。我希望使用 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/ 文件夹?

【问题讨论】:

    标签: node.js glob gulp


    【解决方案1】:

    您需要将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/

    【讨论】:

    • 仅在重新组织文件后才能完美运行,但您的推理是合理的,因此我将您的答案标记为正确。谢谢。
    • 相反,使用 gulp-flatten。 stackoverflow.com/questions/21153338/…
    • 作为其他人的说明,请确保您没有将 src 中的 read 选项设置为 false(默认设置为 true)。跨度>
    • 当我这样做时,它正在复制整个根目录。
    【解决方案2】:

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

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

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

    您需要在 src 中包含 base 选项...

    我实验发现:

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

    2. 重申做什么移动文件,它是glob 模式:

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

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

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

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

    【讨论】:

    • 感谢您的解释。我不需要 base 选项,但我需要完全按照您的描述指定 *.* 以实际移动正确的文件。 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多