我知道Google Closure Compiler进行类型检查,但是否有其他替代方法?最好不要与库和优化器紧密耦合。如果没有,请问是否有办法让Google Closure Compiler仅进行静态分析?在这里,静态分析指的是为参数定义类型等内容,我可以通过某些方式运行它,以便在出现拼写错误或传递错误类型时提供警告。
我一直很喜欢Intellij Idea/WebStorm编辑器,它可以解析jsdoc并进行自己的静态分析以标记潜在或实际的类型安全错误。虽然需要一些工作才能使继承与一些常见框架配合使用,但它已经被证明非常有用。由于JavaScript原型继承有许多可能的方法,因此编译器需要比其他语言更多的帮助。
这是一个商业工具,但我能够将其用于Java、PHP、JavaScript、Python和Ruby项目,所有这些项目都有相当不错的静态分析和重构辅助工具。我曾经使用Emacs并运行Node.js进程进行JSHint和Closure Compiler,但这种方式要容易出错得多。
微软的AJAX Minifier对JS文件的预处理要求相对较少,可以使用默认设置运行并生成高度压缩的文件,同时仍然能够与外部代码兼容: http://ajaxmin.codeplex.com/
但是,由于Javascript的设计方式,Closure Compiler和Ajax Minifier都只能进行非常有限的静态分析,除了基本的语法检查之外。访问未声明的属性可能只是检查undefined,分配未声明的变量只意味着在全局范围内声明它,将对象分配给包含数字的变量是合法的等等。在JS中有很多在其他典型语言(如Java、C#)中被认为是超出界限的操作,因此如果没有为特定编译器声明类型、边界和期望,您所能防止的错误就会受到限制。
我更感兴趣的是能够在两种主流编译器(MS和Google)之间进行转换的工具。这对于IDE支持、测试带有高级优化的代码大小等方面都会非常有用。