Windows上的常量EBUSY问题

时间:2014-11-22 05:23:09

标签: windows node.js gulp gulp-watch

我有一个非常简单的Gulpfile:

var gulp = require('gulp'),
    prefix = require('gulp-autoprefixer'),
    gsass = require('gulp-sass');
gulp.task('sass', function() {
    gulp.src('scss/*.scss')
        .pipe(gsass({
            unixNewlines: true,
            style: 'compact'
        }))
        .pipe(prefix('last 2 versions'))
        .pipe(gulp.dest('.'));
});

gulp.task('default', ['sass'], function() {
    gulp.watch('scss/*.scss', ['sass']);
});

当更改SCSS文件并运行sass任务时,我偶尔会(大约10%的时间)在控制台上收到以下错误消息:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: EBUSY, open 'C:\whatever\scss\main.scss'

有问题的错误发生在致电gulp.src期间。将read: false选项传递给该函数会阻止错误发生(但当然会阻止sass工作)。

此错误是一个问题,因为只要遇到错误,监视任务就会停止运行。 gulp-plumber.on('error', ...)都无法解决此问题。

有没有办法解决这个问题?我在Windows上,如果它是相关的。

更多相关要点:

  • 删除sass完全没有解决问题。
  • 对任一任务的内容进行试验/捕获也不起作用。
  • 我使用Sublime Text 3编辑文件。我认为问题是gulp.src尝试读取文件,而Sublime仍在写入文件(虽然我并不完全确定)。

2 个答案:

答案 0 :(得分:3)

您可以在Microsoft Word中打开其中一个文件。 Word锁定对文件的访问。 完全退出MS Word并重新构建。 解决了我的问题。希望它有所帮助!

答案 1 :(得分:0)

所以我对此并不完全确定,因为我没有运行Windows,但这里有一些指示:

  • 就像我在评论中提到的那样,总是return来自gulp任务的流。这样gulp的任务管理器就会知道任务何时完成,并且可以正确地对依赖项进行排序。
  • 如果要覆盖系统正在使用的文件,则不建议使用。有关详细信息,请参阅此问题:https://github.com/joyent/node/issues/3017
  • 我不确定这会有什么帮助,但您可以尝试将编译后的CSS编写到子目录中,比如./dist/css或者其他类似的东西。
  • vinyl-fs gulp.src上使用{{1}}等模块,可能值得开启一个问题(首先尝试以上几点后!)。