从 Less v2 开始,您可以使用plugins。您还可以在插件中使用访问者。可以在以下位置找到使用访问者的示例:https ://github.com/less/less-plugin-inline-urls 。
在您的访问者插件中,您可以使用如下所示的内容:
visitRule: function (ruleNode, visitArgs) {
if(ruleNode.name[0].value != '-some-aribitrary-property')
{
return ruleNode;
}
else
{
return [];
}
}
请注意,上述内容当前不会删除但会生成: ;
. 稍后我将更新我的答案,另请参阅:如何在 Less 访问者插件中从树中删除条目。
它似乎不适用于 v1.7 中的访客 - 你有一个例子吗?
小于 < v2
更新
正如@Joscha 本人所建议的那样使用:
var parser = new(less.Parser)();
parser.parse(yourLessData, function(err, tree) {
var css = tree.toCSS({
plugins: [new RemoveProperty()]
});
});
和:
RemoveProperty = function() {
this._visitor = new tree.visitor(this);
};
RemoveProperty.prototype = {
isReplacing: true,
run: function (root) {
return this._visitor.visit(root);
},
visitRule: function (ruleNode, visitArgs) {
if(ruleNode.name != '-some-aribitrary-property')
{
return ruleNode;
}
else {
return [];
}
}
};
结束更新
lib/less
在调用中创建一个文件,custom-visitor.js
其中包含以下内容:
(function (tree) {
tree.RemoveProperty = function() {
this._visitor = new tree.visitor(this);
};
tree.RemoveProperty.prototype = {
isReplacing: true,
run: function (root) {
return this._visitor.visit(root);
},
visitRule: function (ruleNode, visitArgs) {
if(ruleNode.name != '-some-aribitrary-property')
{
return ruleNode;
}
else {
return [];
}
}
};
})(require('./tree'));
与在 less/lib/index.js add 中相比require('./custom-visitor.js');
,这个文件的结尾现在看起来如下所示:
require('./env');
require('./functions');
require('./colors');
require('./visitor.js');
require('./import-visitor.js');
require('./extend-visitor.js');
require('./join-selector-visitor.js');
require('./custom-visitor.js');
require('./to-css-visitor.js');
require('./source-map-output.js');
for (var k in less) { if (less.hasOwnProperty(k)) { exports[k] = less[k]; }}
最后new(tree.RemoveProperty)(),
进入 less/lib/parser.js,在第 554 行附近,代码如下所示:
visitors = [
new(tree.joinSelectorVisitor)(),
new(tree.processExtendsVisitor)(),
new(tree.RemoveProperty)(),
new(tree.toCSSVisitor)({compress: Boolean(options.compress)})
],