-->

在客户端的JavaScript uglifyjs? (或替代解析器)(uglifyjs on c

2019-10-29 14:57发布

我需要从javascript内解析(并且可能修改)一个js表达式(具体而言,我想实际EVAL之前来标记一些的eval()的表达式)

我真的很喜欢UglifyJS README例子,但很可惜,它需要的Node.js有没有什么办法让这对客户方浏览器上运行?

(我不是一个真正的JS专家,所以如果我完全误解这个平台啄请让我知道)

如果做不到这一点,是有一个替代的js解析器? 目前,我期待LintJS或esprima或类似的东西

Answer 1:

UglifyJS工作在浏览器和双方的NodeJS,像Esprima做(最好仔细检查,但对于每一个浏览器的兼容性规格)。 事实上,你可以玩弄浏览器UglifyJS(Chrome的首选)通过进入UglifyJS网站,打开你的检查控制台,然后输入:

var ast = UglifyJS.parse("var foo= 1")

然后,你可以探索的AST数据。 例如,以获得变量声明中使用的名称:

ast.body[0].definitions[0].name.name // returns "foo"

如果你想修改AST树再研究结构和生成自己的AST节点来扩展树。 该UglifyJS文档是好的,并研究结构的格式是一个小手卷(弹出对话框变得有点讨厌,我不得不写我自己的文档解析器创建的文档,我可以享受多学习)。 AST的节点只是简单的对象(不需要构造函数或原型,只是反对以简单的属性值或对象的子对象/数组常量),只要他们拥有所有必需的属性和AST结构你就会有一个有效的AST树。 例如,你可以改变的变量名是这样的:

ast.body[0].definitions[0].name.name = "bar";

修改树后,可以再打印回成JavaScript源与代码生成功能 。 像这样:

// assuming variable ast already exists from above
var stream = UglifyJS.OutputStream(); // there are options you can pass to control basic formatting
ast.print(stream);
var code = stream.toString();
console.log(code); // equals "var bar=1;"

UglifyJS是伟大的,所以是Esprima 。 Esprima使用蜘蛛猴AST格式是Javascript的一个众所周知的AST标准,丑化使用它自己的AST模型。 我发现,Esprima的AST格式是干净的,但冗长,而UglifyJS较短,但不知道它的清洁。 也有工具Esprima像Escodegen来生成代码,就像UglifyJS一样。

最佳游览所有这些,看看你感觉很舒服,他们都做类似的大事,让你前所未有的自动化您重新分解和代码分析任务。



文章来源: uglifyjs on client-side javascript ? (or an alternative parser)