Бесконечный цикл с автоматическим обновлением / созданием файлов
Я пытаюсь использовать некоторые плагины gulp (jscs
, csscomb
) стиль моего кода на лету во время разработки.
У меня проблема с процессом gulp, выполняющим бесконечный цикл с задачей форматирования.
Что я считаю, что происходит:
- начать
serve
задача какая-то - начальный запуск выполняется со всеми задачами для подготовки файлов для промежуточного сервера
- локальный промежуточный сервер запускается параллельно с задачей наблюдения
myfile.scss
обновляется разработчиком- наблюдатель глотка запускает задачу csscomb
- Плагин csscomb изменяет файл и заменяет его
- задача наблюдателя видит изменение от замены файла и снова запускает задачу форматирования ...
- плагин csscomb запускается снова и так далее...
Вот фрагмент, который вызывает этот цикл. (Примечание: здесь используется версия 4)
'use strict'
import { task, parallel, series, src, dest, watch, plugins } from './gulp';
import { startStagingServer } from './servers';
import { solution } from './solution.map';
const path = require('path');
task('serve', parallel(startStagingServer, watchStyles);
function watchStyles() {
watch([ solution.src.styles ], series(formatStyles, compileStyles))
}
function formatStyles(done) {
return src([ solution.src.styles ])
.pipe(plugins.csscomb())
.pipe(dest(solution.src.mount)) // the root of the solution
}
function compileStyles() {
return src([ solution.src.styles ])
.pipe(plugins.sass().on('error', plug.sass.logError))
.pipe(dest(path.join(solution.dest.stage, 'serve')));
}
Кто-нибудь знает способ избежать этого?
1 ответ
Чтобы избежать этого, не нужно помещать исправление в наблюдателя. Используйте 2 отдельные функции: одну исправляет, а другую нет. Смотрите только тот, который этого не делает. Пример:
function taskJscsFix() {
return gulp.src(path.JS)
.pipe(jscs({
configPath: './gulp/.jscsrc',
fix: true
}))
.pipe(gulp.dest(path.SRC.JS));
}
function taskScripts() {
return gulp.src(path.JS)
.pipe(jscs({
configPath: './gulp/.jscsrc'
}))
.pipe(jscs.reporter())
.pipe(gulp.dest(path.DEST.JS));
}