如何用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执行系统命令。
相关链接:
-
xcopy的用法
-
吞噬执行和吞噬跑