ast babeljs --3 (删除未使用的变量)

 

 

https://www.cnblogs.com/gaoyongjian/p/13246736.html

 

 

// 将js代码转换成AST
const { parse } = require("@babel/parser");
// 用来遍历AST中的节点
const traverse = require("@babel/traverse").default;
// AST转换成js
const generator = require("@babel/generator").default;
// 用来判断节点类型和生成新的节点
const t = require("@babel/types");
const fs = require("fs");

const jscode = fs.readFileSync("./demo.js", {
    encoding: "utf-8"
});
let ast = parse(jscode);

const visitor =
    {
        VariableDeclarator(path) {

            const {id} = path.node;

            const binding = path.scope.getBinding(id.name);

            //如果变量被修改过,则不能进行删除动作。
            if (!binding || binding.constantViolations.length > 0) {
                return;
            }

            //长度为0,说明变量没有被使用过。
            if (binding.referencePaths.length === 0) {
                path.remove();
            }

        },
    }


traverse(ast, visitor);

let code = generator(ast).code;

fs.writeFile('./demoNew.js', code, (err) => { });

 

posted @ 2021-02-15 23:31  AngDH  阅读(436)  评论(0编辑  收藏  举报