虽然JavaScript和它的许多库(jQuery,RequireJS)允许创建许多伟大的网站,但当我考虑构建一个更大的网站时,我发现它缺乏类型安全令人望而生畏。
谷歌有一个很棒的closure compiler,它允许你用JSDoc annotate你的JavaScript,并让它进行类型检查。在试验了它的富类型系统之后,我希望这将极大地提高一个生命周期更长的JavaScript项目的可维护性。
唯一的问题是它不能很好地与RequireJS这样的AMD库配合使用。有一个实验性的--transform_amd_modules标志,它连接JavaScript文件并通过消除它来处理作用域。然而,这似乎有点反模式,消除了RequireJS的大部分好处(但保留了模块化的文件结构)。还有一个问题是,未来会得到多少支持
由于最终目标是类型安全,而不是以牺牲RequireJS的好处为代价,我最好的选择是什么?
PS:虽然我已经使用RequireJS作为AMD库的选择,但我不会反对使用不同的AMD库的解决方案。
发布于 2012-05-29 06:39:44
尽管Closure Compiler可以与各种JavaScript库一起使用,但当与Closure Library一起使用时,会获得最大的好处,它有自己的模块和依赖系统。使用闭合库的Web应用程序通常被编译成一个JavaScript文件,该文件不需要异步加载模块。但是,确实提供了对模块的支持,这些模块可以异步加载。Chad Killingsworth为如何设置模块here提供了一个很好的例子。此外,plovr工具还提供了额外的module support来简化它们的使用。
如果您已经决定使用Closure编译器(并且您没有绑定到大型AMD代码库),那么您可能会通过在新代码中采用Closure库及其模块/依赖系统来最大限度地提高生产率。如果您确实计划使用AMD代码库,那么正如您所提到的,新的实验性编译器标志--transform_amd_modules和--process_common_js_modules可能会有所帮助,但当使用未注释的库时,您会错过编译器的大部分功能。
展望未来,如果ECMAScript Harmony modules成为官方标准,那么Closure、Dojo和YUI等库很可能最终会符合该标准。这最终可能使无缝集成来自不同库的JavaScript代码成为可能。同时,如果您想编写JavaScript应用程序并享受类型检查、死代码消除、缩小、高级内存管理、浏览器不可知论和现象级标准库,那么我强烈建议您将Closure编译器与Closure库结合使用。
https://stackoverflow.com/questions/10782612
复制相似问题