UMD 叫做通用模块定义规范(Universal Module Definition),它可以通过运行时或者编译时让同一个代码模块在使用 CommonJs、CMD 甚至是 AMD 的项目中运行。它没有自己专有的规范,是集结了 CommonJs、CMD、AMD 的规范于一身,
((root, factory) => { if (typeof define === 'function' && define.amd) { //AMD define(['jquery'], factory); } else if (typeof exports === 'object') { //CommonJS cmd var $ = requie('jquery'); module.exports = factory($); } else { root.testModule = factory(root.jQuery); } })(this, ($) => { //todo });
CMD 叫做通用模块定义规范(Common Module Definiton)
格式如下:
define(factory);
具体用法如下:
// moudle-a.js define(function(require, exports, module) { module.exports = { a: 1 }; }); // moudle-b.js define(function(require, exports, module) { var ma = require('./moudle-a'); var b = ma.a + 2; module.exports = { b: b }; });
CommonJs 是一种 JavaScript 语言的模块化规范,它通常会在服务端的 Nodejs 上使用。
在 CommonJs 的模块化规范中,每一个文件就是一个模块,拥有自己独立的作用域、变量、以及方法等,对其他的模块都不可见。CommonJS规范规定,每个模块内部,module 变量代表当前模块。这个变量是一个对象,它的 exports 属性(module.exports)是对外的接口。加载某个模块,其实是加载该模块的 module.exports 属性。require 方法用于加载模块。
//moudle-a.js moudle.exports = { a: 1 }; //moudle-b.js var ma = require('./moudle-a'); var b = ma.a + 2; module.exports = { b: b };
// CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() var b = require('./b') b.doSomething() ... }) // AMD define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好 a.doSomething() ... b.doSomething() ... })