如何用gulprecursion复制目录?

我正在尝试从一个工作目录到一个服务器(同一台机器)的项目。 使用下面的代码:

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

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

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

下面的工作没有压扁文件夹结构:

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

'**/*'是重要的部分。 该expression式是一个强大的文件select工具glob 。 例如,对于只复制.js文件,使用: 'input/folder/**/*.js' 。js 'input/folder/**/*.js'

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

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

如果像我一样,你可能会忘记这一点,然后尝试:

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

所以 – 提供一个基础的解决scheme,所有的path都有相同的基本path。 但是如果你想提供不同的基本path,这仍然是行不通的。

我解决这个问题的一种方法是通过相对path的开始。 对于你的情况:

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

这个原因起作用的是,Gulp将基础设置为第一个显式块的结束 – 导致它将基础设置为cwd(这是我们都想要的结果!)

这只适用于如果你可以确保你的文件夹结构不会有一定的path可以匹配两次。 例如,如果你有与js相同级别的randomjs/ ,你最终会匹配两个。

这是我发现将这些作为顶层gulp.src函数的一部分的唯一方法。 但是,创build一个插件/函数可能会很简单,可以分离出每个小球,因此您可以指定它们的基础目录。

如果要将文件夹的全部内容recursion复制到另一个文件夹中,可以从gulp执行以下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-run插件从gulp执行系统命令。

相关链接:

  1. xcopy的用法

  2. 吞噬执行和吞噬跑