8

尽管 JavaScript 及其许多库(jQuery、RequireJS)允许创建许多出色的网站,但在考虑构建更大的网站时,我发现它缺乏类型安全性令人生畏。

Google 有一个很棒的闭包编译器,它允许您使用 JSDoc注释您的 JavaScript 并对其进行类型检查。在尝试了其丰富的类型系统后,我希望这将极大地提高寿命较长的 JavaScript 项目的可维护性。

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

最终目标是类型安全,而不是以 RequireJS 的好处为代价,我最好的选择是什么?

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

4

1 回答 1

10

虽然Closure Compiler可以与各种 JavaScript 库一起使用,但与具有自己的模块和依赖系统的Closure Library一起使用时可以获得最大的好处。使用 Closure 库的 Web 应用程序通常编译成一个 JavaScript 文件,不需要异步模块加载。但是,Closure 确实提供了对模块的支持,这些模块可以异步加载。Chad Killingsworth提供了一个很好的例子来说明如何在这里设置模块。此外,plovr工具提供附加模块支持以简化它们的使用。

如果您决定使用 Closure 编译器(并且您没有绑定到大型AMD代码库),您可能会通过在新代码中采用 Closure 库及其模块/依赖系统来最大限度地提高生产力。如果您确实打算使用 AMD 代码库,那么正如您所提到的,新的实验性编译器标志--transform_amd_modules并且--process_common_js_modules可能会有所帮助,但是当使用未注释的库时,您会错过编译器的大部分功能。

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

于 2012-05-28T22:39:43.973 回答