UMD

UMD (Universal Module Definition), 希望提供一个前后端跨平台的解决方案(支持AMD与CommonJS模块方式),。

实现原理

UMD的实现很简单:

  • 先判断是否支持Node.js模块格式(exports是否存在),存在则使用Node.js模块格式。
  • 再判断是否支持AMD(define是否存在),存在则使用AMD方式加载模块。
  • 前两个都不存在,则将模块公开到全局(window或global)。
    各种具体的实现方式,可以查看UMD的github。我这里举例一个jQuery使用的,按照如上方式实现的代码:
  1. // if the module has no dependencies, the above pattern can be simplified to
  2. (function (root, factory) {
  3. if (typeof define === 'function' && define.amd) {
  4. // AMD. Register as an anonymous module.
  5. define([], factory);
  6. } else if (typeof exports === 'object') {
  7. // Node. Does not work with strict CommonJS, but
  8. // only CommonJS-like environments that support module.exports,
  9. // like Node.
  10. module.exports = factory();
  11. } else {
  12. // Browser globals (root is window)
  13. root.returnExports = factory();
  14. }
  15. }(this, function () {
  16. // Just return a value to define the module export.
  17. // This example returns an object, but the module
  18. // can return a function as the exported value.
  19. return {};
  20. }));

参考资料

原文: https://leohxj.gitbooks.io/front-end-database/content/javascript-modules/about-umd.html