Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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上的uglifyjs?(或替代解析器)_Javascript_Client Side_Uglifyjs - Fatal编程技术网

客户端javascript上的uglifyjs?(或替代解析器)

客户端javascript上的uglifyjs?(或替代解析器),javascript,client-side,uglifyjs,Javascript,Client Side,Uglifyjs,我需要从javascript中解析(并可能修改)js表达式 (特别是我想在实际eval之前标记一些eval()表达式) 我真的很喜欢UglifyJS自述示例,但遗憾的是,它需要node.js 有没有办法让它在客户端浏览器上运行 (我不是真正的js专家,所以如果我完全误解了这一点 平台上的东西(请让我知道) 如果做不到这一点,是否有替代的js解析器? 目前,我正在寻找LintJS或esprima或类似的东西UglifyJS在浏览器和NodeJS中都能工作,就像esprima一样(最好仔细检查每个浏

我需要从javascript中解析(并可能修改)js表达式 (特别是我想在实际eval之前标记一些eval()表达式)

我真的很喜欢UglifyJS自述示例,但遗憾的是,它需要node.js 有没有办法让它在客户端浏览器上运行

(我不是真正的js专家,所以如果我完全误解了这一点 平台上的东西(请让我知道)

如果做不到这一点,是否有替代的js解析器?
目前,我正在寻找LintJS或esprima或类似的东西

UglifyJS在浏览器和NodeJS中都能工作,就像esprima一样(最好仔细检查每个浏览器的兼容性规格)。事实上,您可以在浏览器中使用UglifyJS(首选Chrome),方法是访问站点,打开inspector控制台并键入:

var ast = UglifyJS.parse("var foo= 1")
然后您可以浏览AST数据。例如,要获取变量声明的名称,请使用:

ast.body[0].definitions[0].name.name // returns "foo"
如果要修改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使用Spider Monkey AST格式,这是一个众所周知的Javascript AST标准,Uglify使用它自己的AST模型。我发现Esprima的AST格式干净但冗长,而UglifyJS较短但不确定是否干净。还有一些工具可以让Esprima像UglifyJS一样生成代码


最好将它们全部浏览一遍,看看您觉得舒服的地方。它们都做了类似的伟大事情,并允许您以前所未有的方式自动化重新分解和代码分析任务。

我已经使用esprima+escodegen一周了,这是一个很好的组合。AST是更冗长的,但是因为处理节点是容易的,例如AST.Boo[[ 0 ] ]分配。左,我不认为这是一个问题。太棒了,很高兴听到。顺便说一句,我正在完成一个项目,该项目为您提供Javascript数据上的完整xpath,例如JSON结构(或AST树)。它被称为JSElement,很快就会提供(www.JSElement.org-准备好后)。这样,您可以在AST树中搜索表达式,直接修改节点,然后重新生成。Project已准备就绪。您可以使用此库查找和测试AST中的元素将适用于任何JavaScript数据,因此可以使用UglifyJS的AST或esprima。享受吧!