我正在尝试将项目从工作目录转移到服务器(同一台机器)。使用以下代码:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
我希望看到所有文件都被复制了。但它会使dir结构变平 - 所有目录都被复制,但每个文件都放在根/var/www
Gulp看起来像是一个很棒的构建工具,但复制项目肯定是一个简单的过程吗?
答案 0 :(得分:290)
以下工作没有展平文件夹结构:
gulp.src(['input/folder/**/*']).pipe(gulp.dest('output/folder'));
'**/*'
是重要的一部分。该表达式是glob,它是一个功能强大的文件选择工具。例如,对于仅复制.js文件,请使用:'input/folder/**/*.js'
答案 1 :(得分:163)
原来,复制完整的目录结构gulp
需要为您的gulp.src()
方法提供基础。
因此可以在上面的结构中使用gulp.src( [ files ], { "base" : "." })
来递归复制所有目录。
如果像我一样,你可能会忘记这一点,那就试试吧:
gulp.copy=function(src,dest){
return gulp.src(src, {base:"."})
.pipe(gulp.dest(dest));
};
答案 2 :(得分:54)
所以 - 假设所有路径具有相同的基本路径,提供基础的解决方案。但是如果你想提供不同的基本路径,这仍然无法发挥作用。
我解决这个问题的一种方法是使路径的起点相对。 对于你的情况:
gulp.src([
'index.php',
'*css/**/*',
'*js/**/*',
'*src/**/*',
])
.pipe(gulp.dest('/var/www/'));
这样做的原因是Gulp将基数设置为第一个显式块的结尾 - 前导*使它在cwd设置基数(这是我们都想要的结果!)
仅当您确保您的文件夹结构不具备可匹配两次的特定路径时,此方法才有效。例如,如果randomjs/
与js
处于同一级别,则最终会匹配两者。
这是我发现将这些作为顶级gulp.src函数的一部分包含在内的唯一方法。创建一个插件/函数可能很简单,可以将每个glob分开,以便为它们指定基本目录。
答案 3 :(得分:-4)
如果要将文件夹的全部内容递归复制到另一个文件夹,可以从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执行系统命令。
相关链接: