1
  • 我查看了 Google Closure Compiler 并找到了这个。它不喜欢“const”、“let”和其他 Javascript 1.7 标签。
  • UglifyJS 似乎也缺少对 Javascript 1.7 的支持。
  • YUI Compressor 不接受像 getter/setter 这样的 ECMASCRIPT 功能

现在有没有支持 Javascript 1.7 功能的压缩器?我唯一需要的是清除注释/空格(GCC 的 WHITESPACE_ONLY 类似物)。

4

2 回答 2

3

如果您需要重写 Firefox 扩展使用的 JavaScript,您最好使用相同的 JavaScript 引擎。有一个名为JSHydra的 JavaScript 重写引擎。最初它需要你编译 SpiderMonkey,这要归功于Parser API。您可以获取其中一个预编译的JavaScript shell nighliesjsshell-OS-ARCH档案)并通过它运行一个简单的脚本(该脚本与原始 JSHydra 二进制文件完全相同):

js jshydra.js scripts/astDecompile.js scriptToRecompile.js > recompiled.js

这将使 JavaScript 引擎解析您的脚本,然后运行scripts/astDecompile.js(作为 JSHydra 的一部分的脚本)将其反编译回 JavaScript 代码。注释将被“自动”删除(JavaScript 引擎不会保留它们)并且反编译的代码除了换行符之外不会有太多空格。如果需要,换行符很容易摆脱。

请注意,官方 JSHydra 存储库有一堆反编译错误,因此您可能想使用我的 fork代替。

于 2012-10-11T15:17:49.477 回答
0

顺便说一句,目前我们切换到escodegen,它对所有 moz-* 特定功能都有很好的支持,甚至还有它们的标志。实际上,我提出了几个拉取请求来支持多个 catch 语句、MemberExpression、特定于 moz 的 GeneratorExpression 等。

项目中唯一缺少的是对 LetStatement 的支持,SpiderMonkey 的 LetStatement AST 有时真的很奇怪,它的逻辑与 ES Harmony 的不同。特定于 moz 的 LetStatements 的 PR 在这里

所以我们现在正在构建我们的扩展,将 escodegen 的 master 分支和 LetStatement 的 PR 分支放在 master 之上。

于 2014-02-21T07:34:16.517 回答