我正在尝试将一个项目从工作目录部署到服务器上(同一台机器)。使用以下代码:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
我希望看到所有文件都被复制。但是它会扁平化目录结构 - 所有目录都会被复制,但每个文件都会放在根目录 /var/www
中。
Gulp 看起来是一个很棒的构建工具,但是复制文件应该是一个简单的过程,不是吗?
我正在尝试将一个项目从工作目录部署到服务器上(同一台机器)。使用以下代码:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
我希望看到所有文件都被复制。但是它会扁平化目录结构 - 所有目录都会被复制,但每个文件都会放在根目录 /var/www
中。
Gulp 看起来是一个很棒的构建工具,但是复制文件应该是一个简单的过程,不是吗?
gulp.src(['input/folder/**/*']).pipe(gulp.dest('output/folder'));
'**/*'
是重要部分。该表达式是一个glob,它是一个功能强大的文件选择工具。例如,只想复制 .js 文件,请使用:'input/folder/**/*.js'
.pipe(gulp.dest('output/folder'));
。 - Matthew Sprankle{base:“。”}
方法相比如何工作。 - M1kedir/**
更改为dir/**/*
无效;文件仍然会被压缩到dest()
目录中。 - M1kebase
的默认值是“folder”,如本答案所示。换句话说,基础路径从 glob 模式开始。这帮助我理解了我的文件最终会在哪里,也是为什么在 gulp.dest
参数中不需要使用 **/*
的原因。Gulp 会将 glob 中的所有内容放入 dest 文件夹,并保持相同的结构。 - Neil Monroe原来要复制完整的目录结构,gulp
需要为你的gulp.src()
方法设置一个基础路径。
因此,可以在上面的结构中使用gulp.src( [ files ], { "base" : "." })
来递归地复制所有目录。
如果像我一样可能会忘记这个设置,则可以尝试:
gulp.copy=function(src,dest){
return gulp.src(src, {base:"."})
.pipe(gulp.dest(dest));
};
base
仍然让你感到困惑,可以参考https://dev59.com/YlsV5IYBdhLWcg3wuxCM#35848322,它做了很好的解释。 - James Skemp所以,如果所有路径具有相同的基本路径,则提供基本工作的解决方案。但是,如果您想提供不同的基本路径,这仍然无法解决问题。
我解决这个问题的方法之一是使路径开头变为相对路径。 对于您的情况:
gulp.src([
'index.php',
'*css/**/*',
'*js/**/*',
'*src/**/*',
])
.pipe(gulp.dest('/var/www/'));
这个方法有效的原因是,Gulp将基础路径设置为第一个显式块的末尾 - 开头的 * 导致它将基础路径设置为 cwd(这就是我们都想要的结果!)
只有在确保文件夹结构不会出现某些可能会匹配两次的路径时,此方法才有效。例如,如果您的 randomjs/
和 js
处于同一级别,则会同时匹配上。
这是我发现的唯一一种将它们作为顶层 gulp.src 函数的一部分包含的方法。然而,很可能很容易创建一个插件/函数,以将每个 glob 分离出来,使您可以为它们指定基础目录。
'assets/subdir/*fonts/*'
,以复制字体目录。 - Wtower@(css)/**/*
。例如,这将保留文件夹结构,但是@()
表示它仅适用于该特定文件夹(您还可以提供多个文件夹)。有关更多信息,请参阅glob的文档。https://www.npmjs.com/package/glob - JacobTheDev