【问题标题】:Modify path of gulp.dest修改 gulp.dest 的路径
【发布时间】:2016-11-14 21:46:47
【问题描述】:

我的目标是在这里找到二进制文件,并将它们提升到exe 目录中的第一个子目录。

我的简化(实际上它有更多垃圾,更多子目录)文件夹结构是这样的:

src
├── exe
│   └── nix
│       └── binary.out
│       └── blah
│   └── mac
│       └── binary.out
│       └── blah
│   └── win
│       └── src
│           └── trigger
│                └── trigger
│                    └── trigger
│                        └── binary.exe
│                    └── Debug

我的目标是将二进制文件复制到dist/exe,如下所示:

dist
├── exe
│   └── nix
│       └── binary.out
│   └── mac
│       └── binary.out
│   └── win
│       └── binary.exe

这是我现在使用的代码:

var path = require('path');

gulp.src(['src/exe/**/*.out', 'src/exe/**/*.exe'])
  .pipe(gulp.dest(function(file) {
    var os = file.path.match(/(?:win|mac|nix)/)[0];
    return 'dist/exe/' + os + '/' + path.basename(file.path);
  }));

但是,即使在操作系统名称之后,这仍然是在复制结构。就像它在我返回的字符串之后附加了**/ 的东西。有没有办法让它不这样做?

【问题讨论】:

    标签: gulp


    【解决方案1】:

    它就像在我返回的字符串之后附加了 **/ 东西。有没有办法让它不这样做

    是的,这正是它所做的,而且是故意的。 ** 之前的任何内容都被视为基本路径,之后的任何内容都是在将文件写入目标目录时使用的路径。 (如果您想了解更多信息,请参阅this answer)。

    通常您可以使用gulp.src() 中的base option 来更改此设置,但这在您的情况下并不适用,因为您需要为nix/mac 提供一个基本路径,为@987654329 提供另一个基本路径@。

    最重要的是您使用gulp.dest() 错误。 gulp.dest() 指定目标目录。您正在尝试使用它来指定目标文件。这是不可能的。

    对您来说最简单的解决方案是使用gulp-rename

    var path = require('path');
    var rename = require('gulp-rename');
    
    gulp.src(['src/exe/**/binary.{exe,out}'])
      .pipe(rename(function(file) {
        file.dirname = file.dirname.split(path.sep)[0];
      }))
      .pipe(gulp.dest('dist/exe'));
    

    【讨论】:

    • 感谢 Sven 的精彩回答!我真的从中学到了很多,并得到了解决方案! gulp-rename 可以解决问题!我学到的非常有趣的事情是{exe,out},谢谢!
    • 偶然可以 gulp-rename 丢弃目录?现在我在第一个子目录中获取二进制文件,但我也在它旁边获取空文件夹。
    • 不,它不能完全丢弃目录,只能改变它们的路径。但是无论如何你不应该得到空的目录,至少如果你的gulp.src() 只选择binary 文件。
    • 啊,废话。我需要选择其中没有. 的二进制文件。所以我这样做了:var gulp_src_ordered = require('gulp-src-ordered-globs'); gulp_src_ordered(['../' + addonname + 'Exe/**/*', '!../' + addonname + 'Exe/**/*.*', '../' + addonname + 'Exe/**/*.exe' ]) - 我选择全部,然后删除其中包含. 的内容。有没有其他方法可以获取所有 exe 文件和其中没有 . 的文件?请原谅XY问题。
    • 我不太明白。像binary.exe 这样的文件确实有一个.,所以应该包含还是排除它?老实说,最好将其作为一个新问题提出,其中包含一个目录列表,该目录列表显示您要包含/排除哪些文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2016-06-29
    • 1970-01-01
    • 2015-04-24
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多