皆为前端工程化中定义模块(module)的规则,如:模块标识,模块依赖,模块实现,模块对外接口,模块加载;

实现时有:异步,同步,依赖前置,依赖就近,预执行,懒执行,软依赖,硬依赖,模块对象支持类型等差异;

Javascript的灵活性、借鉴性、标准难产落地性,带来模块的实现方式(运行时加载/编译静态加载)有本质的差异,代码风格(require,return/import,export)有形式上的差异。


CommonJS

CommonJS Modules/1.0规范,概述, wiki

在服务器上或本地桌面应用程序,定义了模块格式,如node模块的实现,

仅支持对象类型的模块,同步加载。

如模块qux

// filename: qux.js// dependencies
var $ = require('jquery');// methods
function foo(){};// exposed public method (single)
module.exports = foo;
// filename: qux.js
var $ = require('jquery');
var _ = require('underscore');// methods
function foo(){};    //    private because it's omitted from module.exports (see below)
function bar(){};    //    public because it's defined in module.exports
function baz(){};    //    public because it's defined in module.exports// exposed public methods
module.exports = {bar: bar,baz: baz
};

AMD

Asynchronous Module Definition, 概述, Why AMD?

异/同步加载

支持对象、函数、构造器、字符串、JSON等各种类型的模块。

AMD 早期实现为 依赖前置,提前执行

define(id?, dependencies?, factory);

如模块qux

// filename: qux.js
define(['jquery'], function ($) {// methodsfunction foo(){};// exposed public methodsreturn foo;
});
// filename: qux.js
define(['jquery', 'underscore'], function ($, _) {// methodsfunction foo(){}; // private because it's not returned (see below)function bar(){}; // public because it's returnedfunction baz(){}; // public because it's returned// exposed public methodsreturn {bar: bar,baz: baz}
});

兼容CommonJS规范:

// filename: qux.js
define(function (require, exports, module) {// dependenciesvar $ = require('jquery');_ = require('underscore');// exposed public methodsexports.foo= function () {}
});

CMD

Common Module Definition, 概述, 中文

define(function(require,exports,module){...});

CMD实现为 依赖就近,延迟执行

UMD

Universal Module Definition

识别当前环境所支持的模块风格,兼容不同的加载规范

// code from https://github.com/tangshuang/omd
(function(factory){    "use strict";// change to your module namevar NAME = 'omd';if(typeof define == 'function' && (define.cmd || define.amd)) { // amd & cmddefine(function(require){var requires = {/*** dependences: * 1. need to fill requires* 2. use require, moudule name should be defined before* 3. relative path is not allowed in cmd & amd mode*/// 'jquery' : require('jquery'),// 'bootstrap' : require('bootstrap')};var _require_ = function(key) {return requires[key];}return factory(_require_);});}else if(typeof module !== 'undefined' && typeof exports === 'object') { // nodejsmodule.exports = factory(require); // in node, require can be used everywhere generally}else { // none modulethis[NAME] = factory(function(key){return this[key];}.bind(this));}
}).call(this || (typeof window !== 'undefined' ? window : global),function(require){    "use strict";// require('jquery');/*** use return object to export. i.e.* return {name : 'module name',init : function(opotions) {},destory : function() {}};*/});
(function (root, factory) {if (typeof define === 'function' && define.amd) {// AMDdefine(['jquery', 'underscore'], factory);} else if (typeof exports === 'object') {// Node, CommonJS-likemodule.exports = factory(require('jquery'), require('underscore'));} else {// Browser globals (root is window)root.returnExports = factory(root.jQuery, root._);}
}(this, function ($, _) {// methodsfunction foo(){}; // private because it's not returned (see below)function bar(){}; // public because it's returnedfunction baz(){}; // public because it's returned// exposed public methodsreturn {bar: bar,baz: baz}
}));

ES6

import, export

ES标准下的模块,具有静态结构特性,编译时 Tree Shaking 可去 dead-code ;


引用自及扩展阅读:

  • Modules - CommonJS Spec Wiki
  • Modules | Node.js Documentation
  • Why Web Modules?
  • David Calhoun: What is AMD, CommonJS, and UMD?
  • 黄玄:JavaScript Module Loader
  • 黄玄:JavaScript 模块化七日谈
  • 阮一峰:Module 的语法 - ECMAScript 6入门
  • 阮一峰:Javascript模块化编程
  • 掘金:JavaScript 模块简史
  • 玉伯:前端模块化开发那点历史 · seajs/seajs
  • GongYong:Node.js模块的接口设计模式

模块格式:CommonJS AMD CMD UMD ES6相关推荐

  1. commonjs是什么_JavaScript模块化标准CommonJS/AMD/CMD/UMD/ES6Module的区别

    JS-模块化进程 随着js技术的不断发展,途中会遇到各种问题,比如模块化. 那什么是模块化呢,他们的目的是什么? 定义:如何把一段代码封装成一个有用的单元,以及如何注册此模块的能力.输出的值依赖引用: ...

  2. CommonJS/AMD/CMD/UMD

    为什么会有这几种模式? 起源:Javascript模块化 模块化就是把复杂问题分解成不同模块,这样可维护性高,从而达到高复用,低耦合. 1.Commonjs CommonJS是服务器端模块的规范,No ...

  3. 关于 CommonJS AMD CMD UMD 规范的差异总结

    根据CommonJS规范,一个单独的文件就是一个模块.每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的. // foo.js var ...

  4. 关于JavaScript的模块(CommonJS, AMD, CMD, ES6模块)的理解

    Javascript模块化就是解决将代码进行分隔,作用域隔离,模块之间的依赖管理等多个方面问题. 这样的优点不言而喻:1.可维护性2.命名空间私有化,可以避免污染全局环境3.代码重用,通过模块可以方便 ...

  5. CommonJS,AMD,CMD,ES6,require 和 import 详解

    CommonJS,AMD,CMD,ES6 commonJS用同步的方式加载模块.在服务端,模块文件都存在本地磁盘,读取非常快,所以这样做不会有问题.但是在浏览器端,限于网络原因,更合理的方案是使用异步 ...

  6. JS JavaScript模块化(ES Module/CommonJS/AMD/CMD)

    前言 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了, jQuery,Ajax,Node.Js,MVC,MVVM等的助力也使得 ...

  7. 让你的插件兼容AMD, CMD ,CommonJS和 原生 JS

    模块标准 // 支持AMD,CMD以及原生js的引用if (typeof module !== 'undefined' && typeof exports === 'object' & ...

  8. JavaScript模块 commonJS、AMD、UMD、ES6

    模块化 早期,立即调用函数闭包.类.对象实现 Node有自己的模块系统 ES6,JavaScript依托import.export的静态模块系统(不能实现模块的按需加载) 虽然浏览器很早就支持动态导入 ...

  9. node中模块、AMD与CMD、ES6模块,node中使用ES6

    1.Nodejs 中的模块 在node环境中一个js文件就是一个模块(module) 我们采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口 node的 ...

最新文章

  1. 调用Cython时报错: More than one filename match found for utility code Capsule
  2. 转移指令的原理---汇编学习笔记
  3. 第四十九期:大牛总结的MySQL锁优化,写得太好了!
  4. Mac安装metasploit-framework【亲测有用】
  5. 12篇文章带你逛遍主流分割网络
  6. Vue入门指南-05 Vue实例的生命周期(快速上手vue)
  7. Matlab rand randn randint
  8. Lodop打印旋转180度 倒着打
  9. win7设置动态桌面,将视频设为桌面
  10. 禅道管理员忘记密码找回密码
  11. 微信怎样设置聊天显示的字体大小?简单技巧!微信如何调整字体的大小?
  12. 雷军做程序员时写的博客,有点东西!
  13. 编写自己的Photon游戏服务器(Yanlz+Unity+Photon+Server+UNet+KBEngine+Socket+纤程+UDP+立钻哥哥+==)
  14. 【Python】开发笔记
  15. HTML CSS 布局
  16. ZYNQ PS GPIO MIO 基础知识
  17. 单臂路由之2,多网口软路由实现单臂路由功能,且其剩余网口及光猫剩余网口均实现上网功能
  18. 阿里云视频点播的使用(SDK调用示例的运行)
  19. 请问我这段多线程代码为什么会死机?
  20. 面试题---可乐题:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)

热门文章

  1. 康耐视深度学习ViDi Suite书籍-visonman(已经完结)
  2. 为什么标准AR HUD的FOV必须在10°×3°以上|技术科普
  3. java test abc_DOS命令行下成功执行命令:java Test abc 21,则以下描述正确的是()
  4. python 新年祝福,python 新年祝福,,import osi
  5. WEB前端开发准备-Atom编辑器使用说明 Atom常用插件推荐 Atom快捷键
  6. 码农从菜鸟到大牛的必须文章
  7. 记录自己的学习成长之路!
  8. 一阶零输入响应例题_RL 一阶电路的零输入响应, 按指数规律衰减, 按指数规律衰减。_学小易找答案...
  9. 计算机该如何暴力破解
  10. 62道经典 iOS面试题