我知道 Google Closure Compiler 会进行类型检查——但是否有任何替代方案,最好是与库和优化器不紧密耦合的方案?
如果没有,有没有办法让 Google Closure Compiler只做静态分析?
(这里的静态分析是指为参数定义类型等,如果我打错字或传递错误的类型,我可以通过一些东西给我警告。)
我知道 Google Closure Compiler 会进行类型检查——但是否有任何替代方案,最好是与库和优化器不紧密耦合的方案?
如果没有,有没有办法让 Google Closure Compiler只做静态分析?
(这里的静态分析是指为参数定义类型等,如果我打错字或传递错误的类型,我可以通过一些东西给我警告。)
有Doctor JS,这是一个 Mozilla 项目,主要(至少据我了解)对 JS 进行类型检查。
我对 intellij idea / webstorms 编辑器非常满意,它解析 jsdoc 并进行自己的静态分析以标记潜在或实际的类型安全错误。它已被证明非常有用,尽管需要做一些工作才能让继承与一些通用框架一起工作。由于 javascript 原型继承可能有大量方法,编译器需要比其他语言更多的帮助。
它是一个商业工具,但我可以将它用于 java、php、javascript、python 和 ruby 项目,所有这些都带有一些相当不错的静态分析和重构助手。我过去经常使用 emacs 并为 jshint 和闭包编译器运行 node.js 进程,但这不那么脆弱。
Microsoft 的 AJAX Minifier 对于您需要对 JS 文件进行的准备工作量要稍微宽松一些,以便从中获得有用的结果。您可以使用默认值运行它并得到一个仍然可以使用外部代码的高度缩小的文件:http: //ajaxmin.codeplex.com/
但是,由于 Javascript 的设计方式,Closure Compiler 和 Ajax Minifier 只能在基本 linting 之外进行非常有限的静态分析。访问未声明的属性可能只是检查未定义,分配未声明的变量只是意味着在全局范围内声明它,将对象分配给包含数字的变量是合法的,等等。在 JS 中有很多是合法的,你的典型语言(Java, C#) 考虑越界,因此如果不为特定编译器声明类型、边界和期望,那么不幸的是,您可以防止的错误受到限制。
我会对可以在大 2(MS 和 Google)之间转换的东西更感兴趣。这对于 IDE 支持、使用高级优化测试代码大小等很有用。