Меньше CSS-компиляторы возвращают пустым

8

Я даже не уверен, где начать отлаживать это. Несколько месяцев назад я с радостью мог скомпилировать свой CSS из моих файлов LESS. Сегодня я бегу либо, recess --compile test.lessлибо lessc test.lessполучаю пустой вывод. Нет ошибок lessc test.less > test.cssпросто создает пустой файл. Makefile твиттера-bootstrap для ошибок LESS, все это не полезно.

Я использую следующие простые test.lessдля отладки:

@color: #4D926F;
#header {
  color: @color;
}
h2 {
   color: @color;
}

Я на Ubuntu 12.10, я имел обыкновение sudo apt-get install node-lessпредоставлять lessc, и установил углубление из направлений на GitHub (Npm). Оба просто дают мне пустой вывод.

Даже lessc --versionничего не возвращает.

 which lessc

шоу

/usr/local/bin/lessc

и файл не пуст.

nodeВозможно, что-то случилось с моей установкой, но не знаю, как это отладить. apt-get remove --purge node-lessи переустановка не помогла.

Большое спасибо за помощь или любые советы по отладке!

cboettig
источник
Да, /usr/local/bin/lesscэто не правильное местоположение, когда оно находится в официальном репозитории: packages.ubuntu.com/quantal/all/node-less/filelist ... Я полагаю, вы установили его по системному пути, используя sudo npm ...это очень плохая идея.
Анжу

Ответы:

7

В Ubuntu и других дистрибутивах вы должны предпочесть дистрибутивы, а не устанавливать пакеты вручную. Итак, прежде всего вы должны удалить углубление, установленное через npm :

sudo npm uninstall recess -g

Также удалите пакет без узла , установленный через apt-get, чтобы мы могли начать с чистой среды:

sudo apt-get remove node-less

После выполнения этих двух команд убедитесь, что следующие файлы не существуют, и, если они существуют, удалите их:

/usr/bin/lessc
/usr/local/bin/lessc

Также проверьте следующие каталоги (и удалите их, если они существуют):

/node_modules/less
/usr/bin/node_modules/less
/usr/node_modules/less
/usr/local/bin/node_modules/less
/usr/local/node_modules/less
~/.node_modules/less
~/.node_libraries/less

Все эти файлы и каталоги могут быть сгенерированы различными способами. Различные способы установки приводят к использованию разных каталогов. Удаление всех этих файлов важно для того, чтобы ничего не конфликтовало: у вас всегда должна быть установлена ​​одна и только одна версия программного обеспечения в вашей системе. Единственное исключение - когда сам дистрибутив предоставляет разные версии одного и того же программного обеспечения (в этом случае пакеты создаются так, чтобы они не конфликтовали друг с другом).

Теперь у вас чистая среда и вы можете установить без узла :

sudo apt-get install node-less

Обратите внимание, что безузловый пакет не доставляется /usr/bin/recess, просто /usr/bin/lessc, так что все нормально, если происходит recess --compileсбой (или, лучше, он должен завершиться с ошибкой)

Если lesscвсе еще не работает, пожалуйста, проверьте вывод which lessc. Помните: если он возвращает что-то другое /usr/bin/lessc, то это означает, что вы используете не пакет lessc из дистрибутива, а что-то другое.

Андреа Корбеллини
источник
Вам не нужно отдавать предпочтение дистрибутивным пакетам, но смешивание дистрибутивных и скомпилированных пакетов, которые предоставляют схожие двоичные файлы, действительно является решением проблем.
Хавьер Ривера
@ Хавьер: привет. Конечно, вам не нужно выбирать только дистрибутивные пакеты, но мы находимся на Ask Ubuntu, и я думаю, что наиболее подходящее решение - это то, которое говорит вам, как использовать дистрибутивные пакеты. :-)
Андреа Корбеллини
Просто блестящий ответ, спасибо за внимательное объяснение. Теперь все работает как надо. Не уверен, как мне удалось получить версию dpm less, но я предупреждаю, что нельзя смешивать похожие дистрибутивы и скомпилированные пакеты. Жаль, что зачастую невозможно полагаться только на пакеты дистрибутивов, особенно на ruby ​​и т. Д.
cboettig
1
@cboettig: спасибо за ваш отзыв, это очень ценится. Как отметил Хавьер, вы не обязаны использовать дистрибутивные пакеты. Но при установке стороннего программного обеспечения не забывайте устанавливать его не по всей системе. Например, я использую виртуальные машины Python Virtualenv, chroots, Linux Containers (LXC) и Qemu, когда мне нужно запустить программное обеспечение, не предоставляемое дистрибутивом (или когда мне нужны специальные конфигурации системы). Все эти технологии (и многие другие) помогают вам изолировать программное обеспечение, избегая боли.
Андреа Корбеллини
Бег lesscдает /usr/local/bin/lessc no such file or directory, но бег which lesscдает /usr/bin/lessc. Как мне сказать, чтобы использовать Lessc из which lessc?
Джейкоб Валента
3

После выполнения шагов из ответа Андреа вам, возможно, придется бежать, source ~/.bashrcесли вы получаете, bash: /usr/local/bin/lessc: No such file or directoryкогда запускаете lessc и когда which lesscпоказывает /usr/bin/lessc. Это обновляет переменную среды $ PATH.

Брейден Уильямс
источник
Также обратите внимание на ответ от unix.stackexchange.com/questions/5609/… в дополнение к этому.
Jeppe Mariager-Lam