2015-02-06 3 views
3

Я использую следующую структуру папок:Глоток-менее не строю МЕНЬШЕ, когда включен файл изменен

css 
|_ main.css 
| 
|_ less 
    |_ main.less 
    |_ sub.less 
    | 
    |_ shared 
     |_ variables.less 
     |_ header.less 
     |_ footer.less 

Я использую следующий в моем gulpfile.js

gulp.task('less', function() { 
    gulp.src(paths.less + 'main.less', {read: true}) 
     .pipe(plugins.plumber({errorHandler: onError})) 
     .pipe(plugins.less({ 
      paths: [paths.less + 'shared', paths.less] 
     })) 
     .pipe(plugins.plumber.stop()) 
     .pipe(gulp.dest(paths.css)); 
}); 

... 

gulp.task('less:watch', function(){ 
    gulp.watch([paths.less + '**/*.less'], ['less']); 
}); 

gulp.task('default', ['less', 'less:watch']); 

Мой main.less включает в себя @imports для всех остальных файлов LESS.

@import "sub.less"; 
@import "./shared/variables.less"; 
@import "./shared/header.less"; 
@import "./shared/footer.less"; 
  • Если МЕНЬШЕ файл (кроме main.less) обновляется файл main.css не меняется.

  • Если main.less обновляется (необходимо после любого другого МЕНЬШЕ изменения файла), main.css затем обновления.

Как я могу изменить мой gulpfile.js обновить файл «main.css» независимо от того, МЕНЬШЕ файла изменен?

спасибо.

+0

Этот вопрос больше связан с наблюдением, чем с глотком. Можете ли вы включить часовую часть вашего 'gulpfile'? –

ответ

0

Я не мог напрямую воспроизвести вашу проблему, но я ожидаю, что это может произойти из-за того, что измененные файлы считываются из кеша файловой системы.

Меньше использует вызов fs.readFile для чтения импортированных файлов. По умолчанию этот вызов открывает файл с опцией r. Документы не ясно, что вариант r использует файловый кэш файловой системы, но документы действительно говорят вам, что rs option обходит кэш системного файла файл:

«RS» - Открыть файл для чтения в синхронном режиме. Поручает операционной системе обходить кеш локальной файловой системы.

Это в первую очередь полезно для открытия файлов на монтах NFS, так как позволяет пропустить потенциально устаревший локальный кеш. У этого есть очень реальное влияние на производительность ввода-вывода, поэтому не используйте этот флаг, если он вам не нужен.

Обратите внимание, что это не превращает fs.open() в синхронный блокирующий вызов . Если это то, что вы хотите, то вы должны использовать fs.openSync()

Возможное решение:

Пусть менее открыты файлы с опцией rs.Найдите файл node_modules/gulp-less/node_modules/less/lib/less-node/file-manager.js и заменить line 56 со следующим кодом:

fs.readFile(fullFilename, {encoding: 'utf-8', flag: 'rs'}, function(e, data) { 

В противном случае вы могли бы задаться вопросом, почему ваш измененный файл все еще находится в кэше файла и попытаться Rsync кэша файла: https://superuser.com/questions/319286/how-to-totally-clear-the-filesytems-cache-on-linux

+0

К сожалению, это все еще не работает для меня. – Jonathan

0

Там есть gulp-progeny плагина который нацелен на ваш рабочий процесс.