修改gulp.dest的路径

时间:2016-11-14 21:46:48

标签: gulp

我的目标是在这里找到二进制文件,并将它们提升到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);
  }));

然而,即使在os名称之后,这仍然是复制结构。它就像在我返回的字符串后附加**/内容。有没有办法让它不这样做?

1 个答案:

答案 0 :(得分:4)

  

它喜欢在我返回的字符串后附加** / stuff。反正是为了让它不这样做

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

通常情况下,您可以使用gulp.src()中的base option来更改此内容,但这不适用于您的情况,因为您需要一个基本路径nix / {{1另一个用于mac

除了您使用win之外的所有错误。 gulp.dest()指定目标目录。您正尝试使用它来指定目标文件。那是不可能的。

最简单的解决方案是使用gulp-rename

gulp.dest()