У меня есть очень простой 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 не решает проблему.
- Помещение try/catch вокруг содержимого любой задачи также не работает.
- Я использую Sublime Text 3 для редактирования файла. Я думаю, проблема в том, что
gulp.src
пытается прочитать файл, в то время как Sublime все еще пишет в него (хотя я не совсем уверен).
gulp.src
, т.е.return gulp.src().pipe(gulp.dest());
. - person Ben   schedule 24.11.2014