Less.js: 解析器的编程用法

创建于 2016-01-17  ·  5评论  ·  资料来源: less/less.js

你好呀!
我正在为我的学士论文开发一个 less2sass 转换器,后来它也应该成为一个 sass2less 转换器。 我正在寻找一种从较少的项目中获取 AST 的方法。 我一直在试验以下代码:

var parser = new(less.Parser)({}, {contents: {}}, {});
var contents = ".foo {\
  background: #900;\
}\
<strong i="7">@import</strong> \"import/this-is-valid.less\";";
parser.parse(contents, function (e, tree) {
   console.log(JSON.stringify(tree, null, 2));
});

我取回 AST,除非我不尝试导入另一个 less 文件。 我从代码中了解到,解析器应该获取一个包含使用过的导入的参数,这些参数是由 importManager 创建的,它需要上下文作为参数等。我能否得到一些提示,如何获得较少的 AST项目,如果我知道它的源文件?

needs info

最有用的评论

谢谢你们。 问题已解决 :) 我将实际代码放在这里,它可以用于获取 AST,以防有人面临同样的障碍并遇到此问题。

var less = require('less')
  , fs = require('fs')
  , path = require('path');

var src = './test_import.less'; //some less source file
var result = less.parse(fs.readFileSync(src).toString(), {
  filename: path.resolve(src)
}, function(e, tree) {
  console.log(JSON.stringify(tree, null, 2));
});

所有5条评论

这对你有帮助吗? https://github.com/matthew-dean/postcss-less/blob/master/lib/render.js

我能够通过这种方式获得评估后的 AST 树,并且我相信评估后的树包含对未评估树的引用。

我取回 AST,除非我不尝试导入另一个 less 文件。

进口应该没有区别,只要确保你不要错过:

然后将选项上的文件名字段设置为主文件的文件名。 less 将处理进口的所有处理。

编程使用中(更多详细信息请参见 https://github.com/less/less.js/issues/2342#issuecomment-67596931)。

解析器应该使用使用的导入获取参数,这些导入是由 importManager 创建的,需要上下文作为参数等。

并不真地。 importManager(大致)是解析器的一部分,所有导入(通常)都在解析器本身内处理。

谢谢你们。 问题已解决 :) 我将实际代码放在这里,它可以用于获取 AST,以防有人面临同样的障碍并遇到此问题。

var less = require('less')
  , fs = require('fs')
  , path = require('path');

var src = './test_import.less'; //some less source file
var result = less.parse(fs.readFileSync(src).toString(), {
  filename: path.resolve(src)
}, function(e, tree) {
  console.log(JSON.stringify(tree, null, 2));
});

解析函数是否有可能提供忽略导入的选项? 就我而言,我对导入路径有一些特殊的规则,所以less.js 的内部导入过程不会被修改。 我们可以不进行任何评估就将字符串解析为 AST 吗?

我刚刚阅读了源代码,我发现我可以通过{ processImports: false }来禁用导入过程,它对我有用:)

less.parse(content, { processImports: false }, (e, tree) => {
  if (e) { return console.error(e) };
  return console.log(tree);
})

此页面是否有帮助?
0 / 5 - 0 等级