[TOC]
- UMD实现原理参考资料
UMD
UMD (Universal Module Definition), 希望提供一个前后端跨平台的解决方案(支持AMD与CommonJS模块方式),。
实现原理
UMD的实现很简单:
- 先判断是否支持Node.js模块格式(exports是否存在),存在则使用Node.js模块格式。
- 再判断是否支持AMD(define是否存在),存在则使用AMD方式加载模块。
- 前两个都不存在,则将模块公开到全局(window或global)。各种具体的实现方式,可以查看UMD的github。我这里举例一个jQuery使用的,按照如上方式实现的代码:
// if the module has no dependencies, the above pattern can be simplified to(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define([], factory); } else if (typeof exports === 'object') { // Node. Does not work with strict CommonJS, but // only CommonJS-like environments that support module.exports, // like Node. module.exports = factory(); } else { // Browser globals (root is window) root.returnExports = factory(); }}(this, function () { // Just return a value to define the module export. // This example returns an object, but the module // can return a function as the exported value. return {};}));
参考资料
- UMD
- UMD:AMD 和CommonJS的糅合
- cujoJS: Learning modules
原文: https://leohxj.gitbooks.io/front-end-database/content/javascript-modules/about-umd.html
