M1k*_*1ke 161 deployment gulp
我正在尝试将项目从工作目录转移到服务器(同一台机器).使用以下代码:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Run Code Online (Sandbox Code Playgroud)
我希望看到所有文件都被复制了.但它会使dir结构变平 - 所有目录都被复制,但每个文件都放在根目录中/var/www
Gulp看起来像一个伟大的构建工具,但复制项目肯定是一个简单的过程?
can*_*ero 305
以下工作没有展平文件夹结构:
gulp.src(['input/folder/**/*']).pipe(gulp.dest('output/folder'));
Run Code Online (Sandbox Code Playgroud)
这'**/*'是重要的部分.该表达式是一个glob,它是一个功能强大的文件选择工具.例如,仅复制.js文件使用:'input/folder/**/*.js'
M1k*_*1ke 167
事实证明,复制完整的目录结构gulp需要为您的gulp.src()方法提供一个基础.
因此gulp.src( [ files ], { "base" : "." })可以在上面的结构中使用递归复制所有目录.
如果像我一样,你可能会忘记这一点,那么试试:
gulp.copy=function(src,dest){
return gulp.src(src, {base:"."})
.pipe(gulp.dest(dest));
};
Run Code Online (Sandbox Code Playgroud)
ty1*_*824 57
因此 - 假设所有路径具有相同的基本路径,则提供基础的解决方案.但是,如果您想提供不同的基本路径,这仍然无法正常工作.
我解决这个问题的一种方法是使路径的起点相对.对于你的情况:
gulp.src([
'index.php',
'*css/**/*',
'*js/**/*',
'*src/**/*',
])
.pipe(gulp.dest('/var/www/'));
Run Code Online (Sandbox Code Playgroud)
这样做的原因是Gulp将基数设置为第一个显式块的结尾 - 前导*使它在cwd处设置基数(这是我们都想要的结果!)
这仅在您确保文件夹结构不具有可匹配两次的特定路径时才有效.例如,如果您randomjs/处于同一级别js,则最终会匹配两者.
这是我发现将这些作为顶级gulp.src函数的一部分包含在内的唯一方法.创建一个插件/函数可能很简单,可以将每个glob分开,以便为它们指定基本目录.