Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让Babel输出文件';是阿斯特吗?_Javascript_Babeljs - Fatal编程技术网

Javascript 如何让Babel输出文件';是阿斯特吗?

Javascript 如何让Babel输出文件';是阿斯特吗?,javascript,babeljs,Javascript,Babeljs,有没有办法让Babel将文件的AST输出为JSON或类似格式,而不是将其压缩回JS 原因是我希望能够做一些简单的静态分析/代码生成,虽然我的目标是最终在Babel插件(或类似插件)中完成,但我觉得如果我能从静态模型开始,事情会大大简化。你应该检查一下-它可以在构建树时将Babel作为解析器 npmjs页面中的示例: import ASTSource from "ast-source" import estraverse from "estraverse" import fs from "fs"

有没有办法让Babel将文件的AST输出为JSON或类似格式,而不是将其压缩回JS

原因是我希望能够做一些简单的静态分析/代码生成,虽然我的目标是最终在Babel插件(或类似插件)中完成,但我觉得如果我能从静态模型开始,事情会大大简化。

你应该检查一下-它可以在构建树时将
Babel
作为解析器

npmjs页面中的示例:

import ASTSource from "ast-source"
import estraverse from "estraverse"
import fs from "fs"

function transform(AST) {
    var replaced = {
        "type": "babel",
        "value": 42,
        "raw": "42"
    };
    return estraverse.replace(AST, {
        enter: function (node) {
            if (node.type === estraverse.Syntax.Literal) {
                return replaced;
            }
        }
    });
}

var source = new ASTSource(fs.readFileSync("./input.js", "utf-8"), {
    filePath: "./input.js"
});
var output = source.transform(transform).output();
console.log(output.code);// => "var a = 42;" 
console.dir(output.map.toString()); // => source map 
fs.writeFileSync("./output.js", output.codeWithMap, "utf-8");
还有,巴贝尔自己的解析器:

npm安装-g巴比伦

babylon your_file.js>ast.json


节点API示例和源代码:


另外,对于AST参考和插件开发的入门来说,这可能很方便。

您是只想解析代码还是想应用Babel的转换?有相当多的JS解析器。巴贝尔使用自己的橡子叉,称为巴比伦。看一看,哪些特性是流行的解析器(注:我维护该站点)。它实际上还允许您对Babel插件进行原型化(但还不适用于Babel v6)。具体来说,我希望能够运行Babel的解析器插件,以便输出可以包含(例如)流注释数据。不过,我希望在将输出转换为纯ES3/5树之前得到它。这正是我一直在寻找的!