Deployment 如何使用gulp递归复制目录?
我正在尝试将项目从工作目录转移到服务器(同一台机器)。使用以下代码:Deployment 如何使用gulp递归复制目录?,deployment,gulp,Deployment,Gulp,我正在尝试将项目从工作目录转移到服务器(同一台机器)。使用以下代码: gulp.src([ 'index.php', 'css/**', 'js/**', 'src/**', ]) .pipe(gulp.dest('/var/www/')); 我希望看到所有的文件都被复制。但是,它使目录结构扁平化-所有目录都被复制,但每个文件都放在根目录中/var/www Gulp似乎是一个很好的构建工具,但复制项应该是一个简单的过程,当然?结果表明,要复制完整的目录结构,Gu
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
我希望看到所有的文件都被复制。但是,它使目录结构扁平化-所有目录都被复制,但每个文件都放在根目录中/var/www
Gulp似乎是一个很好的构建工具,但复制项应该是一个简单的过程,当然?结果表明,要复制完整的目录结构,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'
如果要将文件夹的全部内容递归复制到另一个文件夹中,可以从gulp执行以下windows命令:
xcopy /path/to/srcfolder /path/to/destfolder /s /e /y
cp -R /path/to/srcfolder /path/to/destfolder
末尾的/y
选项用于抑制覆盖确认消息
在Linux中,您可以从gulp执行以下命令:
xcopy /path/to/srcfolder /path/to/destfolder /s /e /y
cp -R /path/to/srcfolder /path/to/destfolder
您可以使用gulpexec或gulprun插件从gulp执行系统命令
相关链接:
因此,如果所有路径都具有相同的基本路径,那么提供基本路径的解决方案是有效的。但是如果您想提供不同的基本路径,这仍然不起作用 我解决这个问题的一个方法是使路径的开头相对。 对于您的情况:
gulp.src([
'index.php',
'*css/**/*',
'*js/**/*',
'*src/**/*',
])
.pipe(gulp.dest('/var/www/'));
这样做的原因是Gulp将base设置为第一个显式块的结尾-前导*导致它将base设置为cwd(这是我们都想要的结果!)
只有在确保文件夹结构不会有可能匹配两次的特定路径时,这才有效。例如,如果您的randomjs/
与js
处于同一级别,那么您最终将两者匹配
这是我发现的将它们作为顶级gulp.src函数的一部分的唯一方法。然而,创建一个插件/函数,将这些glob中的每一个分离出来,这样您就可以为它们指定基本目录,这可能很简单 我想你忘了加一大口。应该是
.pipe(gulp.dest('output/folder')代码>如何使用特定的文件扩展名执行此操作?是否可以编辑答案以提供原始文件集的示例?我不确定这是否更合适,但我很乐意看看它与{base:“.”
方法相比是如何工作的。需要注意的是,base
的默认值是这个答案中给出的“folder”。换句话说,基础从全局模式开始的地方开始。这有助于我了解文件的最终位置,这也是为什么在gulp.dest
参数中不需要***
的原因。Gulp将glob中的所有内容以相同的结构放入dest文件夹。这并不能完全回答所问的问题。对于如何正确地递归复制,这是一个很好的解决方案,但它不回答如何修改基本目录。对于阅读此问题的任何新观众,应该注意的是,投票率最高的答案无法解决不展平目录的原始问题规范。它确实解决了人们在复制目录中的所有文件时遇到的问题,所以这很有用!通过不扁平化,您的意思是希望“css”、“js”和“src”目录出现在/var/www/
中吗?你可以试试{css,js,src}/***
我知道glob扩展在gulp中可以工作,但是我会感到困惑的是,如果这对列表中的每一项都有不同的作用,因为glob扩展基本上只是为了在执行之前扩展到一个列表。返回shell的问题是,您将失去在流上运行其他命令的能力,例如压缩或分析工具。我认为从多个基本路径开始可能超出了问题的范围。从我最初的问题中,我将文件移动到一个绝对路径,但问题仍然存在,即在没有指定基的情况下,所有全局文件中的所有文件都复制到一个目录中,而不遵循它们现有的层次结构。@M1ke是真的,您问题的要点不是针对不同的基路径。但是,您提到了,但是它使目录结构变平了-所有目录都被复制,但每个文件都放在根/var/www
中,这实际上就是我发现您的问题的原因-我正在寻找一种解决方案,即如何使用不同的基本路径递归复制。基本上,此解决方案适用于您的情况,无需指定默认基数,但也适用于多基路径情况,只要您可以确保前导星不匹配:)此答案是例外的。它专门处理从任意起点复制路径的问题,例如,src可以是'assets/subdir/*fonts/*'
来复制字体目录。添加“cwd”配置以设置当前工作目录。如果base
仍然让您感到困惑,请看哪一个可以很好地解释它。