Смотреть файл LESS с несколькими импортами, компилировать только один файл

Я пытаюсь найти хорошее решение для просмотра одного файла LESS с кучей импортов для изменений (включая изменения в импортированных файлах, но компилируя только основной файл).

Я разделил свой LESS на отдельные файлы как «модули», чтобы сделать его немного более управляемым, а основной файл LESS — это просто набор импортированных файлов. Однако каждое решение, которое я искал для отслеживания изменений вместо того, чтобы каждый раз компилировать вручную, либо компилирует каждый файл LESS в каталоге, либо не распознает изменения в импортированных файлах.

Поэтому я ищу решение, которое могло бы отслеживать изменения во всех файлах LESS, но в случае изменений компилировало бы только основной файл LESS. Если бы кто-то делал что-то подобное раньше, мне бы это очень помогло, вместо того, чтобы делать что-то с нуля.

Обновление: я нашел этот https://github.com/jonycheung/Dead-Simple-LESS-Watch-Compiler. По умолчанию он проверяет и компилирует каждый меньший файл в каталоге. Было довольно просто изменить, чтобы просматривать все файлы меньшего размера и компилировать только основной файл при обнаружении изменений.


person teel    schedule 24.10.2012    source источник


Ответы (2)


В LESS 1.3.1 появилась новая функция @import-once. Вместо @import используйте @import-once.

Это плохо документировано, но вот журнал изменений и проблема, обсуждение, другое

person Paul Armstrong    schedule 24.10.2012
comment
Если вы прочитаете комментарии по ссылке, которую упоминает здесь Пол Армстронг, вы увидим, что теперь (по состоянию на август 2013 г.) стандартное поведение импорта LESS заключается в том, чтобы импортировать каждый файл только один раз. Вам больше не нужно использовать альтернативный синтаксис @import-once, который сохранен только для обратной совместимости. Кажется, есть задержка в реализации в lessphp, так как pull-request все еще в ожидании. Однако в lessc и node теперь это поведение по умолчанию. - person monotasker; 19.08.2013

Я не знаю, используете ли вы Coffeescript, но, поскольку Less зависит от Node, он у вас установлен. Я создал следующий файл Cakefile, который очень легко преобразовать в обычный файл javascript. Это также должно быть очень легко изменить для нескольких файлов.

option '-c', '--lessFile [main Less Filename]', 'The single file to be compiled into the stylesheet, it should import any files it needs'

task 'watch-less', 'Compile Less scripts on the fly during Development', (opts) ->
  less = options.less

  watchers = []

  compile = () ->
    w.close() for w in watchers
    exec "lessc #{less} #{less.replace /\.less$/, ".css"}"
    watch()

  watch = () ->
    exec "lessc -M #{less} -", (err, stdout, stderr) ->
      throw new Error err if err
      watchers = (fs.watch(f, compile) for f in stdout.trim().split(' ').splice(1))

  compile()

Уведомления и отказ от ответственности:

  • Кроме меньше никаких внешних зависимостей.
  • Остерегайтесь fs.watch, а не кроссплатформенности
person Chris Pfohl    schedule 10.09.2013
comment
это можно сделать еще лучше, используя less API - person Chris Pfohl; 10.09.2013