概述
- 在ES6(2015)之前,javascript并不是一种模块化编程的语言,因为ES6之前不支持class,也就没有所谓的module
CommonJS规范(服务端)
-
2009年出现Nodejs,将js用于服务端编程,标志着javascript模块化编程正式诞生
-
CommonJS暴露模块使用module.exports和exports
-
module.exports初始值为一个空对象{},exports是指向的modules.exports的引用,require()返回的是module.exports而不是exports,简而言之,区分他们之间的区别就是 exports 只是 module.exports的引用,辅助后者添加内容用的。
所以,不应该说exports和module.exports有什么区别,因为他们根本不是同一作用的两个类别,仅仅是碰巧有相同单词。exports和module.exports -
CommonJS中,有一个全局性方法require()用于加载模块
AMD规范(浏览器端)
- CommonJS规范不适用于浏览器环境的主要原因是,模块都在服务器端,加载时间取决于网速的快慢,可能要等待很长时间,导致浏览器假死
- AMD即Asynchronous Module Definition的缩写
- AMD规范的模块导出,使用define(),define(id?, dependencies?, factory)来定义,id是模块名称,dependencies是所依赖的模块数组,factory为工厂方法,返回一个模块函数
- AMD中,同样使用require加载模块,但要求两个参数,require([module], callback),第二个参数为加载成功后的回调函数
ES6标准规范
- export导出模块,包括命名式导出(名称导出)和默认导出(定义式导出)
- 命名式导出,export前缀关键词导出对象
- 默认导出,export default
- 默认导出能够在import时省略一个花括号
网友评论