Gulp 缩小和移动具有相同文件夹结构的文件



我有一个这样的文件夹结构:

.
├── 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下的目录结构(因为srcbase(。 因此,您只需将所有这些发送给dist即可获得相同的结果。

你可以决定你喜欢哪种形式,我认为第一个版本更清楚一些。 如果src下有您不希望被gulp.srcglob 捕获的文件。

最新更新