Javascript模块化就是解决将代码进行分隔,作用域隔离,模块之间的依赖管理等多个方面问题。
这样的优点不言而喻:1.可维护性2.命名空间私有化,可以避免污染全局环境3.代码重用,通过模块可以方便的引入,而不用担心对现有的代码造成影响。接下来分别分析一下几种主流的模块化方法:CommonJS:在该规范中,每个js文件就是一个独立的模块上下文,在这个上下文中,默认创建的属性都是私有的。该规范采用的是同步加载模块,即一个一个依次加载模块。
        //sayHi.js文件var sayHi = function(){console.log("hello")};module.exports = sayHi;//main.js文件        var say = require('./sayHi.js')say();//hello
``
注意:CommonJS是服务器端的解决方案,需要一个兼容的脚本加载器作为前提条件。该加载器必须支持名为require和module.exports的函数,它们将模块导入导出。AMD:异步模块定义,它优先照顾浏览器的模块加载场景,使用了异步加载和回调的方式。该规范要求脚本加载器对define方法的支持。该方法有三个参数:模块名称(可省略),模块运行依赖(可省略,多个以数组形式表示),所有依赖加载后执行的回调函数。define既是一种引用模块的方式,也是定义模块的方式。因为是通过回调执行代码,这样就能保证依赖在加载时可以异步。

define(sayHi, [’./sayHi’], function(say){
say.sayHi()
})

 CMD:在CMD中,一个模块就是一个文件。全局函数define,用来定义模块。参数factory可以是一个函数,也可以为对象或者字符串。当factory为对象,字符串时,表示模块的接口就是该对象,字符串。

define(function(require, exports, module){
//模块代码
}

ES6模块:该模块会自动采用严格模式。使用export选择性的给其他模块暴露自己的属性和方法,供其他模块使用。使用export default默认暴露所有属性和方法。一个文件只能使用一次。使用import...from...导入其他模块提供的属性和方法。属性和方法要放在大括号里,可以使用as改变变量名。

import {a as b} from ‘./sayHi’

关于JavaScript的模块(CommonJS, AMD, CMD, ES6模块)的理解相关推荐

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

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

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

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

  3. 兼容多种模块规范(AMD,CMD,Node)的代码

    前言 昨天,公司同事问了我如下一个问题: 说他在看一个插件时,看到了源码结构如截图所示,他知道(function(){})()是一种立即执行函数,但是在截图中,最后的那个圆括号里又写了一个函数func ...

  4. 模块格式:CommonJS AMD CMD UMD ES6

    皆为前端工程化中定义模块(module)的规则,如:模块标识,模块依赖,模块实现,模块对外接口,模块加载: 实现时有:异步,同步,依赖前置,依赖就近,预执行,懒执行,软依赖,硬依赖,模块对象支持类型等 ...

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

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

  6. CommonJS/AMD/CMD/UMD

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

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

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

  8. python如何卸载模块cmd_使用cmd python模块时,如何使程序正常崩溃?

    不幸的是,完成者中的异常被捕获在readline黑暗深处的某个地方.你可以试试这样的东西: import cmd import traceback def log_exceptions(fun): d ...

  9. javascript模块化之CommonJS、AMD、CMD、UMD、ES6

    javascript模块化之CommonJS.AMD.CMD.UMD.ES6 一.总结 一句话总结: CommonJS是同步加载模块,用在服务端:AMD是异步加载模块,用于浏览器端 1.为什么服务器端 ...

最新文章

  1. BRIEF描述子生成算法
  2. python错误-Python错误解决
  3. nginx 指向一个文件夹_弄懂nginx的语法就是这么简单
  4. python查看关键字列表的命令是_Python 41 完整查询语句 和 一堆关键字
  5. 云主机tracert外网无返回需在安全组入方向加ICMP Time Exceeded TTLexpired in transit
  6. java环境变量配置方法
  7. 在 CentOS 上安装 Docker 引擎
  8. 拼多多平台API接入文档
  9. (概率论习题册题解)第二章 随机变量及其分布
  10. 用javascript和jquery部分知识实现的打地鼠小游戏
  11. word一直提示“缓存凭据已到期,无法上载或下载你的更改”问题---登入了两个onedrive账号(一个是个人的,一个是学校教育版的)发现编辑word后,文本无法保存
  12. 红与蓝:现代Webshell检测引擎免杀对抗与实践
  13. JS获取当前时间的前一个小时及格式化时间
  14. 基于单片机的水塔水位检测系统
  15. Windows下mysql数据库的下载、安装、使用(详细)(有后续)
  16. zbb20170216_spring_aop
  17. 进程---什么是多进程
  18. 二叉树:已知先序和中序求后序,已知中序和后序求先序
  19. Azure DevOps —— Azure Artifacts 包管理平台
  20. Android之集成极光推送

热门文章

  1. matlab累加数组的前n行,有一组m行n列的数组,在matlab中如何编程,每三个数求一次平均数(行与列分别求)?...
  2. 计算机网络专业以后装网线,一种便于安装的计算机网络用网线安装盒的制作方法...
  3. Balsamiq Wireframes 免费安装
  4. python爬虫好友图片_Python爬取所有微信好友头像,制作微信好友图片墙
  5. BookXNote使用
  6. aix的ps命令详解
  7. Laya2自动同步cullingMask方案以及灯光裁剪补丁
  8. 某品牌电脑电源灯两黄五白代表什么含义
  9. java中获取一天的开始时间和结束时间
  10. Matter Commissioning