1

我有一个非常简单的 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 工作)。

这个错误是一个问题,因为只要遇到错误,watch 任务就会停止运行。既不gulp-plumber也不.on('error', ...)帮助解决这个问题。

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

还有一些相关的点:

  • 完全删除 sass 并不能解决问题。
  • 围绕任一任务的内容进行尝试/捕获也不起作用。
  • 我正在使用 Sublime Text 3 来编辑文件。我认为问题在于gulp.src在 Sublime 仍在写入文件时尝试读取文件(尽管我不完全确定)。
4

2 回答 2

3

There is a decent chance you have one of your files open in Microsoft Word. Word locks up access to the file. Completely exit MS Word and re-build. Fixed the problem for me. Hope it helps!

于 2015-06-22T19:58:54.850 回答
0

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

  • 就像我在评论中提到的那样,总是return来自 gulp 任务的流。这样一来,gulp 的任务管理器就知道任务何时完成,并且可以正确地排序您的依赖关系。
  • 如果您要覆盖系统正在使用的文件,则不建议这样做。有关更多详细信息,请参阅此问题:https ://github.com/joyent/node/issues/3017
  • 我也不确定这是否会有所帮助,但您可以尝试将编译后的 CSS 写入子目录,比如./dist/css类似的内容。
  • 在用于等的模块vinyl-fs上打开一个问题(在先尝试上述几点之后!)可能值得。gulp.src
于 2014-11-24T00:58:13.360 回答