javascript - 与 AMD (requirejs) 一起获得闭包编译器类型安全性的最可靠方法是什么?

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

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

Google 有一个很棒的closure compiler这让你可以 annotate你的 JavaScript 和 JSDoc 并检查它的类型。在试用了其丰富的类型系统后,我预计这将大大提高生命周期更长的 JavaScript 项目的可维护性。

唯一的问题是它不能很好地与AMD 一起玩像 RequireJS 这样的库。有一个实验--transform_amd_modules连接 JavaScript 文件并通过消除它来处理作用域的标志。然而,这似乎有点反模式,消除了 RequireJS 的大部分好处(但保留了模块化文件结构)。还有一个问题是 future 会得到多少支持

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

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

最佳答案

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

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

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

关于javascript - 与 AMD (requirejs) 一起获得闭包编译器类型安全性的最可靠方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782612/

相关文章:

javascript - Play Framework 2 : JavaScript gets duplicated as a result of minification (google closure compiler)

javascript - 使用 ScrollMagic.js 作为 AMD 模块

javascript - 毯子.js如何修改JavaScript文件?

javascript - 带有 chart.js 的 angularjs 中的响应式图表

javascript - 使用浏览器后退按钮时,我的应用程序中的标题不会更改

knockout.js - 在 Durandal/SPA 应用程序中配置 Knockout 验证

google-closure-compiler - 为什么 "Hello World"plovr 示例中出现 JSC_MISSING_PROVIDE_ERROR?

javascript - 使用 Google Closure Templates 重写一个名为 "default"的属性

javascript - 如何从 Angular 指令运行一次 jQuery 插件?

javascript - 当用户到达页面末尾以加载新内容时,您如何调用 JavaScript (AJAX) 函数?