我目前正在为我的公司准备评估 JavaScript 模块化方法。我们正在为我们的项目定义“JavaScript 最佳实践”,模块化是核心问题之一。
到目前为止,我的研究揭示了两种主要方法:
周围有大量的加载器、插件、库等。
除此之外,还有goog.provide
/goog.require
来自Google Closure Library。
是否有进一步的方法需要考虑?我错过了任何重要/相关的规格吗?
我们的要求,简单地说:
- 在单独的文件中构造 JavaScript 代码。
- 在运行时加载相关模块。
- ...无需将每个文件都包含为脚本标签。
- 不必维护 JavaScript 文件的索引。
- 支持聚合和缩小 - 能够构建和使用单个缩小/优化的 JavaScript 文件。
- 能够以不同的组合使用模块——通常有不同的网页/客户端需要不同的模块子集。
- 支持文档(使用 JSDoc?)。
- 适合测试。
- 适用于网页,跨浏览器。
- 合理的IDE支持。
潜在地:
- 与 ES6 模块对齐。
- 适用于 Node.js 和移动平台(如 PhoneGap/Cordova)。
来自答案的新建议:
- ecmascript-harmony加上额外的编译器。
- angularjs(见下面的注释)。
- extjs(见下面的注释)。
旁注:
- 问题不在于哪种方法更好。
- 我不是要特定的库和工具,而是要方法和规范。
- 我并不是专门要求场外资源。(如果没有 SO 标签,我们可能不合理考虑它。)
- 关于angualjs或extjs等框架的注释。这在这个问题的框架中并不适合。如果项目需要一个框架(无论是 AngularJS 还是 ExtJS),那么几乎没有模块化问题,因为框架必须提供模块化 OOTB。如果项目不需要框架,由于模块化,带框架就大材小用了。这是我特别不询问库/工具的原因之一。