Gulp 文件夹命名类似文件时遇到问题

Gulp having issues with folders that are named like a file

我有一个gulp任务:

gulp.task('css-dependencies', function() {
  return gulp.src(['bower_components/**/*.css','!bower_components/**/*.min.css'])
        .pipe(rename({dirname: './css'}))
        .pipe(gulp.dest('./'));
});

这适用于所有其他组件,但我想使用 animate.css 并通过 bower 添加将其放入名为 animate.css:

的文件夹中
Project
 |    
 +-- bower_components
    |  
    +-- animate.css
        |
        +--animate.css
        +--animate.min.css (etc)

导致 gulp 重命名任务失败:

Error: EISDIR: illegal operation on a directory, open ‘~/css/animate.css' at Error (native)

除了加入特定的豁免之外,我该如何解决这个问题?

您的问题是 gulp.src() 中的模式匹配两件事:

  1. 目录bower_component/animate.css
  2. 文件bower_component/animate.css/animate.css

然后你继续做 rename({dirname: './css'}) 这意味着你最终得到:

  1. 一个目录css/animate.css
  2. 一个文件css/animate.css

两者显然不能同时存在

您需要确保 gulp.src() 中的模式不匹配任何目录本身(仅匹配那些目录中的文件)。

gulp.src() 使用 glob internally and options to gulp.src() are passed through to glob. That means you can use the nodir option of glob 来防止匹配目录:

return gulp.src(['bower_components/**/*.css','!bower_components/**/*.min.css'], {nodir:true})
  .pipe(rename({dirname: './css'}))
  .pipe(gulp.dest('dist'));