将闭包编译器类型安全性与AMD(requirejs)一起使用的最坚固方法是什么?

时间:2012-05-28 09:51:32

标签: javascript requirejs google-closure-compiler type-safety

虽然JavaScript及其许多库(jQuery,RequireJS)允许创建许多优秀的网站,但我在考虑构建更大的网站时发现它缺乏类型安全性。

Google有一个很棒的closure compiler,它允许您使用JSDoc annotate使用JavaScript并进行类型检查。在尝试了它的丰富类型系统后,我希望这会大大提高更长寿的JavaScript项目的可维护性。

唯一的问题是它与RequireJS等AMD库不能很好地协同工作。有一个实验性--transform_amd_modules标志,用于连接JavaScript文件并通过消除它来处理范围。然而,这似乎是一种反模式,消除了RequireJS的大部分好处(但保留了模块化文件结构)。还有一个问题是未来会有多少支持

最终目标是类型安全而不是昂贵的RequireJS的好处,这将是我最好的赌注?

PS:虽然我已经将RequireJS用作AMD的首选库,但我不会反对使用不同AMD库的解决方案。

1 个答案:

答案 0 :(得分:10)

尽管Closure Compiler可以与各种JavaScript库一起使用,但与Closure Library一起使用时可以获得最大的好处,Chad Killingsworth具有自己的模块和依赖系统。 使用Closure Library的Web应用程序通常编译成一个JavaScript文件,不需要异步模块加载。但是,Closure确实为模块提供支持,这些模块可以异步加载。 here提供了如何设置模块plovr的一个很好的示例。此外,module support工具还提供了添加AMD以简化其使用。

如果您已决定使用Closure Compiler(并且您不依赖于大型ECMAScript Harmony modules代码库),则可以通过在新代码中采用Closure Library及其模块/依赖关系系统来最大限度地提高工作效率。如果您计划使用AMD代码库,那么正如您所提到的,新的实验性编译器标记--transform_amd_modules--process_common_js_modules可能有所帮助,但是当使用未注释的库时,您会错过编译器的大部分功能。

展望未来,如果{{3}}成为官方标准,那么Closure,Dojo和YUI等库很可能最终符合该标准。这最终可以无缝集成来自不同库的JavaScript代码。与此同时,如果你想编写JavaScript应用程序并享受类型检查,死代码消除,缩小,高级内存管理,浏览器不可知论以及非凡的标准库,那么我强烈建议将Closure Compiler与Closure结合使用图书馆。