我有一个这样的文件夹结构:
.
├── dist/
└── src/
├── index.php
└── projects/
├── some-project/
│ ├── main.css
│ ├── main.js
│ └── index.html
└── N'th project/ ...
我需要在不破坏文件夹结构的情况下缩小并移动 src/中的每个项目到 dist/。应如下所示:
.
├── dist/
│ ├── index.php
│ └── projects/
│ ├── some-project/
│ │ ├── main.css(minified)
│ │ ├── main.js(minified)
│ │ └── index.html
│ └── N'th project/ (also minified) ...
└── src/
├── index.php
└── projects/
├── some-project/
│ ├── main.css
│ ├── main.js
│ └── index.html
└── N'th project/ ...
谢谢你的时间。
我用这样的东西解决了它。如果有人想使用:
.pipe(gulp.dest(function(file){
let splittedUrl = file.history[0].split("\");
let projectName = splittedUrl.slice(splittedUrl.indexOf("projects"),-1);
//console.log(projectName.join("/"));
return "dist/" + projectName.join("/");
}));
gulp.task("projectTest", () => {
return gulp.src("./src/projects/**/*.css")
// minify pipe, etc.
.pipe(gulp.dest('dist/projects'))
});
从 https://gulpjs.com/docs/en/api/concepts#glob-base:
球基 - 有时称为球父 - 是路径段 在 glob 字符串中的任何特殊字符之前。因此,球形底座
/src/js/**.js
是/src/js/
.与 glob 匹配的所有路径都是 保证共享全球基数 - 该路径段不能 变量。由
src()
生成的乙烯基实例是用 glob 基底构造的 设置为其base
属性。当写入文件系统时dest()
,base
将从输出路径中删除以保留 目录结构。
这写起来有点令人困惑。 在我的代码中,globstar**
之前的部分是base
。 所以./src/projects/
是基础。 并且始终保留base
下的目录结构 - 但这不包括projects
(因为这是base
的一部分,将在gulp.dest
中自动删除(。
在dest
管道中,目录结构(project1、project2 等(仍然存在,但会发送到您的dest
文件夹,开头没有base
路径。 因此,如果需要,您需要将该base
路径的任何部分添加回dest
文件夹中。
因此,gulp.dest('dist/projects')
根据需要将保留的文件夹结构放回projects
下。
因此,如果我说的是真的,那么这个替代方案也应该有效:
gulp.task("projectTest", () => {
// return gulp.src("./src/projects/**/*.css")
return gulp.src("./src/**/*.css")
// .pipe(gulp.dest('dist/projects'))
.pipe(gulp.dest('dist'))
});
现在保留了src
下的目录结构(因为src
是base
(。 因此,您只需将所有这些发送给dist
即可获得相同的结果。
你可以决定你喜欢哪种形式,我认为第一个版本更清楚一些。 如果src
下有您不希望被gulp.src
glob 捕获的文件。