我的目标是在这里找到二进制文件,并将它们提升到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名称之后,这仍然是复制结构。它就像在我返回的字符串后附加**/
内容。有没有办法让它不这样做?
答案 0 :(得分:4)
是的,这正是它的作用而且是故意的。在它喜欢在我返回的字符串后附加** / stuff。反正是为了让它不这样做
**
被视为基本路径之前的任何内容,之后的任何内容都是将文件写入目标目录时使用的路径。 (如果您想了解更多信息,请参阅this answer。)
通常情况下,您可以使用gulp.src()
中的base
option来更改此内容,但这不适用于您的情况,因为您需要一个基本路径nix
/ {{1另一个用于mac
。
除了您使用win
之外的所有错误。 gulp.dest()
指定目标目录。您正尝试使用它来指定目标文件。那是不可能的。
最简单的解决方案是使用gulp-rename
:
gulp.dest()