尝试覆盖Gulp中的现有文件时出现EEXIST错误?

时间:2016-11-11 20:03:14

标签: gulp

我在Gulpfile中有一些我想要运行的任务,要么让它们的输出替换或改变现有文件。例如,我想运行wiredep并让代码替换index.html内的块(与源文件相同),所以基本上我有以下内容:

gulp.task('bower', () => {
  return gulp.src('app/index.html')
    .pipe(wiredep())
    .pipe(gulp.dest('app/index.html')) // Have wiredep operate on the source 
})

但这会产生EEXIST错误。

同样,我想运行stylus命令,并将输出传递给已经存在的文件(因为它以前运行过)。

我是否有任何选择,但每次都要运行del?似乎Gulp应该能够轻松覆盖现有文件,但我无法想出一个简单的方法。

4 个答案:

答案 0 :(得分:25)

gulp.dest()需要目录。您正在传递文件名

gulp尝试创建目录app/index.html会发生什么,因为它已经是一个具有该名称的文件。

您需要做的就是将app/作为目标目录传递:

gulp.task('bower', () => {
  return gulp.src('app/index.html')
    .pipe(wiredep())
    .pipe(gulp.dest('app/'));
})

答案 1 :(得分:2)

您应该可以使用gulp.dest选项overwrite

  

options.overwrite   输入:Boolean

     

默认值:true

     

指定是否应覆盖具有相同路径的现有文件。

答案 2 :(得分:1)

没关系。

gulp.task('bower', () => {
  return gulp.src('app/index.html')
    .pipe(wiredep())
    .pipe(gulp.dest('app')) // Have wiredep operate on the source 
})

答案 3 :(得分:0)

Gulp 有 overwrite 选项

gulp.task('bower', () => {
  return gulp.src('input/*.js')
    .pipe(gulp.dest('output/',{overwrite:true})) 
})

另一个例子

const { src, dest } = require('gulp');

function copy() {
  return src('input/*.js')
    .pipe(dest('output/',{overwrite:true}));
}

完整文档https://gulpjs.com/docs/en/api/dest