2012 年 3 月 5 日更新:Bootstrap 人员已在 Bootstrap 2.0.2 版(尚未发布)中修复了此问题。请参阅此提交。
潜在的错误是,当前版本的 less.js 不允许您直接为 url() 值使用变量(例如url(@iconWhiteSpritePath)
)——相反,您必须使用字符串插值(例如url("@{iconWhiteSpritePath}")
),它完成了同样的事情. 引导人员刚刚更新了他们的语法以考虑到这个怪癖。
原始答案
我今天遇到了确切的问题并找出了原因。由于您的堆栈是我之前的几个版本(我使用的是 Bootstrap 2.0 和 less.js 1.2.2)我不能确定这是同一个问题,但它可能是相关的。
无论如何,对我来说问题是 Twitter Bootstrap 定义了一些变量:
@iconSpritePath: "../img/glyphicons-halflings.png";
@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png";
然后在 sprites.less 中的背景图像的 url() 值中直接使用它们:
[class^="icon-"],
[class*=" icon-"] {
display: inline-block;
width: 14px;
height: 14px;
line-height: 14px;
vertical-align: text-top;
background-image: url(@iconSpritePath);
background-position: 14px 14px;
background-repeat: no-repeat;
.ie7-restore-right-whitespace();
}
.icon-white {
background-image: url(@iconWhiteSpritePath);
}
根据这个 Github 问题中的讨论,这导致了一个重大问题。当 less.js 阻塞这个值时,整个编译都会失败。
好消息是 csnover 提供了该问题的修复程序。只需在 tree.URL 中更改这一行:
if (typeof(window) !== 'undefined' && !/^(?:https?:\/\/|file:\/\/|data:|\/)/.test(val.value) && paths.length > 0) {
至
if (typeof(window) !== 'undefined' && typeof(val.value) !== 'undefined' && !/^(?:https?:\/\/|file:\/\/|data:|\/)/.test(val.value) && paths.length > 0) {
你应该被设置。换句话说,我们只需确保设置了 val.value 以便 charAt() 不会因未定义而窒息。
希望此修复将很快提交给项目,并且 Bootstrap 将在开箱即用的浏览器环境中与 less.js 一起使用。