这两个组件的作用是相反的。parser组件用来将JS代码转换成AST,generator用来将AST转换成 JS代码。
    使用 let ast=parser.parse(jscode) 即可完成JS代码转换到AST的过程。这时输出AST,就会跟网页中解析出一样的结构。输出前先使用JSON.stringify把对象转为json数据,另外,parser的parse方法是有第2个参数的。

    1. let ast = parser.parse(jscode, {
    2. sourceType: 'module'
    3. })

    sourceType默认为script。当解析的JS代码中,含有’import’、’export’’等关键字时,需要指定sourceType为module,不然会有如下报错:

    1. SyntaxError:'import'and 'export'may appear only with 'sourceType:"module"'(1:0)

    使用let code = generator(ast).code;可以把AST转换为JS代码。generator返回的是一个对象,其中的code属性才是需要的代码。同时,generator 的第二个参数接收一个对象,可以设置一些选项来影响输出的结果。完整的选项介绍可在Babel官方文档https://babeljs.io/docs/en/babel-generator中查看。

    1. let code = generator(ast, {
    2. retainLines: false,
    3. comments: false,
    4. compact: true
    5. }).code
    6. console.log(code)

    retainLines表示是否使用与源代码相同的行号,默认为false,输出的是格式化后的代码。comments表示是否保留注释,默认为true。compact表示是否压缩代码,与其相同作用的选项还有 minified 和 concise,只不过压缩的程度不一样,minified 压缩得最多,concise压缩得最少。多个选项之间可以配合使用。