如何使用 Gulp 递归地复制目录?

我正在尝试将一个项目从一个工作目录转移到一个服务器(同一台机器) ,使用以下代码:

gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));

我希望看到所有文件都被复制。然而,它扁平化的目录结构-所有的目录被复制,但每个文件都放在根 /var/www

Gulp 似乎是一个很好的构建工具,但是复制项目应该是一个简单的过程吧?

126281 次浏览

原来,要复制完整的目录结构 gulp,需要为 gulp.src()方法提供一个基础。

因此,可以在上面的结构中使用 gulp.src( [ files ], { "base" : "." })递归地复制所有目录。

如果,像我一样,你可能会忘记这一点,那么试着:

gulp.copy=function(src,dest){
return gulp.src(src, {base:"."})
.pipe(gulp.dest(dest));
};

以下内容可以在不压平文件夹结构的情况下工作:

gulp.src(['input/folder/**/*']).pipe(gulp.dest('output/folder'));

'**/*'是重要的组成部分。这个表达式是一个 一团,它是一个强大的文件选择工具。例如,仅用于复制。Js 文件使用: 'input/folder/**/*.js'

如果你想要递归地将一个文件夹的全部内容复制到另一个文件夹中,你可以执行下面的 windows 命令:

xcopy /path/to/srcfolder /path/to/destfolder /s /e /y

最后的 /y选项是禁止覆盖确认消息。

在 Linux 中,您可以从 Gulp 执行以下命令:

cp -R /path/to/srcfolder /path/to/destfolder

您可以使用 Gulp-exec狼吞虎咽插件执行 Gulp 中的系统命令。

相关连结:

  1. Xcopy 用法

  2. Gulp-exec 和 < a href = “ https://www.npmjs.com/package/Gulp-run”rel = “ nofollow norefrer”> Gulp-run

因此,提供基本路径的解决方案在所有路径都具有相同基本路径的情况下是可行的。但是如果您想要提供不同的基本路径,这仍然不会起作用。

我解决这个问题的一个方法是使路径的起点相对。 对于你的情况:

gulp.src([
'index.php',
'*css/**/*',
'*js/**/*',
'*src/**/*',
])
.pipe(gulp.dest('/var/www/'));

这样做的原因是 Gulp 将基础设置为第一个显式块的末尾——前导 * 使它在 cwd 上设置基础(这是我们都想要的结果!)

只有当您能够确保文件夹结构不会有某些可能匹配两次的路径时,这种方法才能起作用。例如,如果 randomjs/js处于同一水平,那么最终将两者都匹配。

这是我发现的将它们包含在顶级 Gulp.src 函数中的唯一方法。然而,创建一个插件/函数可能很简单,它可以分离出这些 globs 中的每一个,这样您就可以为它们指定基本目录。