Gulp没有按预期复制所有文件

24

我尝试为我的个人网站项目创建一个gulpfile.js文件。虽然我以前没有这样做过,但通过一些“试错”,它现在以一种可接受的方式工作。

即使经过了1000次修改,唯一不起作用的是简单的复制文件和文件夹。

var files = {
  data_src : [
    './files.json',
    'data/**/*.*'
  ],
  distribution_dest : '_distribution'
};

gulp.task('copy-data', function() {
  gulp.src(files.data_src, { base: './' })
    .pipe(gulp.dest(files.distribution_dest))
    .pipe(notify({message: 'Data copied for distribution!'}));
});

这应该会复制所有子文件夹和文件到 gulp.dest,但只复制了其中一半,有些文件夹将被忽略,即使我更改它们的名称等(没有特殊字符,与已正确复制的子文件夹结构相同...)- 无论如何都不行。我只是看不出任何规律。

运行gulp时没有错误消息。没有任何可以帮助我找到错误的东西。

为什么有些文件夹或文件被排除在复制之外?


我使用 base 来保持文件夹 / 子文件夹结构;尝试使用 'base' 与不使用 'base' -> 对复制过程没有影响。

我还改变了 'copy-data' 任务在运行列表中的位置。实际上它是要运行的第一个任务。似乎无论它是第一个还是最后一个,其行为都没有变化。

gulp.task('default', function() {
  gulp.run('copy-data', 'custom-sass', 'framework-sass', 'custom-js', 'framework-js', 'replace-tags', 'browser-sync');
    ... some watches ...
});

数据文件夹的结构看起来像这样:

./data
   |-doc
   |---content
   |---template
   |-img
   |---chart
   |---icon
   |---logo
   |---pattern
   |---people
   |---photo
   |---symbol
   |-----brandklassen
   |-----brandschutzzeichen
   |-----gebotszeichen
   |-----gefahrensymbole
   |-----rettungszeichen
   |-----verbotszeichen
   |-----verkehrsrechtzeichen
   |-----warnzeichen
   |---wallpaper

/data/doc和所有子文件夹都没问题。
/data/img/chart/data/img/people也没问题。

/data/img/photo中只复制了21张照片中的14张。
/data/img/symbol及其子文件夹和/data/img/wallpaper完全被忽略了。


1
如果'base'是根目录,您不应该需要该选项。可能是您的选择模式之一不正确。能否给我们一些关于文件夹结构的想法? - Davin Tryon
5
你应该将上述内容添加为下面的答案,并勾选已回答框。 - Kelly J Andrews
1
你是在复制没有扩展名的文件吗?你当前的 glob 只能捕获带有扩展名的文件。尝试使用 './data/**/*' 替代。 - MLM
不知道为什么,但在这些情况下我会寻找gulp插件,因为gulp的功能有时对我来说很奇怪。使用gulp-copy。 - Morteza
你提到没有看到错误。我使用的一个东西是 gutil = require('gulp-util'); => https://github.com/gulpjs/gulp-util 这样你就可以做一些像 .pipe(less().on('error', gutil.log)) 的事情;我不确定它是否有帮助你找到答案,但这是一个好东西需要知道。 - Jason Lydon
显示剩余3条评论
1个回答

37

问题已解决! 问题是由于异步操作任务引起的。添加一个return强制gulp在继续之前完成复制过程!

gulp.task('copy-data', function() {
    return gulp.src(files.data_src, { base: './' })
    .pipe(gulp.dest(files.distribution_dest))
    .pipe(notify({message: 'Data copied for distribution!'}))
});

现在所有图像都将被复制!


2
太好了!谢谢,这真的很有帮助。 - Anil Kumar Pandey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接