LESS CSS编译器返回空白。

我甚至不确定从哪里开始调试这个问题。几个月前,我可以愉快地从我的LESS文件编译CSS。今天,无论是运行recess --compile test.less还是lessc test.less,我都只得到一个空白输出。没有错误。lessc test.less > test.css只会创建一个空白文件。Twitter Bootstrap的LESS错误Makefile,虽然不太有帮助。
我正在使用以下简单的test.less进行调试:
@color: #4D926F;
#header {
  color: @color;
}
h2 {
   color: @color;
}

我正在使用Ubuntu 12.10,我使用sudo apt-get install node-less来安装lessc,并按照GitHub上的说明recess(npm)进行了安装。但是两者都没有给我任何输出。
即使是lessc --version也没有返回任何内容。
 which lessc

展示
/usr/local/bin/lessc

文件不是空的。
我的node安装可能出了问题,但是不知道如何调试。尝试使用"apt-get remove --purge node-less"命令卸载并重新安装也没有帮助。
非常感谢您的帮助或任何关于调试的提示!

是的,/usr/local/bin/lessc 不是正确的位置,当它来自官方仓库时:http://packages.ubuntu.com/quantal/all/node-less/filelist ... 我猜你使用 sudo npm ... 将其安装在系统路径中,这真的不是一个好主意。 - dAnjou
2个回答

在Ubuntu和其他发行版中,你应该优先选择发行版的软件包而不是手动安装软件包。所以,首先,你应该删除通过npm安装的recess:
sudo npm uninstall recess -g

同时删除通过apt-get安装的无节点(node-less)包,以便我们可以从一个干净的环境开始:

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

所有这些文件和目录可能以各种方式生成。不同的安装方法会导致使用不同的目录。删除所有这些文件对于确保没有冲突非常重要:您应始终在系统上安装一个且仅有一个软件版本。唯一的例外是当发行版本身提供相同软件的不同版本时(在这种情况下,软件包被制作成彼此之间不冲突)。

现在您拥有一个干净的环境,可以安装node-less

sudo apt-get install node-less

请注意,node-less软件包不会安装/usr/bin/recess,只会安装/usr/bin/lessc,所以如果recess --compile失败(或者,更好的是,它必须失败),那是完全正常的。
如果lessc仍然无法工作,请检查which lessc命令的输出。记住:如果返回的内容与/usr/bin/lessc不同,这意味着您没有使用发行版软件包中的lessc,而是其他软件。

你不需要偏爱发行版的软件包,但是混合使用发行版和编译的软件包提供相似二进制文件真的会导致问题的产生。 - Javier Rivera
@Javier:嗨。我确信你不仅需要选择发行包,但我们现在是在Ask Ubuntu上,我认为最合适的解决方案是告诉你如何使用发行包。 :-) - Andrea Corbellini
非常出色的回答,感谢仔细的解释。现在一切都正常运作了。不确定我是如何安装了一个有问题的 npm less 版本,但是我注意到不要混合使用类似的发行版和编译包是很重要的。遗憾的是,在某些情况下,只依赖于发行版的软件包并不总是可行的,尤其是在使用 Ruby 等语言时。 - cboettig
1@cboettig:谢谢你的反馈,真的很感激。正如Javier所指出的,你并不被强制使用发行包。但是当你安装第三方软件时,请记住不要将其系统范围内安装。例如,我在需要运行发行包未提供的软件(或者需要特殊系统配置)时,会使用Python Virtualenv、chroots、Linux容器(LXC)和Qemu虚拟机。所有这些技术(以及许多其他技术)都可以帮助你隔离软件,避免痛苦。 - Andrea Corbellini
运行lessc会显示/usr/local/bin/lessc: 没有那个文件或目录,但是运行which lessc会显示/usr/bin/lessc。我该如何告诉它使用which lessc中的lessc? - Jacob Valenta
如果你遇到了Jacob提到的错误,请参考https://unix.stackexchange.com/questions/5609/how-do-i-clear-bashs-cache-of-paths-to-executables中的答案。 - Jeppe Mariager-Lam

按照Andrea的回答中的步骤操作后,如果在运行lessc时出现"bash: /usr/local/bin/lessc: No such file or directory"的错误,并且"which lessc"显示"/usr/bin/lessc",则需要运行"source ~/.bashrc"来更新$PATH环境变量。

除此之外,还请注意来自https://unix.stackexchange.com/questions/5609/how-do-i-clear-bashs-cache-of-paths-to-executables的答案。 - Jeppe Mariager-Lam