简介:html
1、ES6与nodeJS vue
require/exports 出生在野生规范当中,什么叫作野生规范?即这些规范是 JavaScript 社区中的开发者本身草拟的规则,获得了你们的认可或者普遍的应用。好比 CommonJS、AMD、CMD 等等。import/export 则是名门正派。TC39 制定的新的 ECMAScript 版本,即 ES6(ES2015)中包含进来。node
区别:react
import 、export 是es6的一个语法标准,若是要兼容浏览器的话必须转化成es5的语法。es6
require、exports是CommonJS的标准。是Nodejs所使用的标准,目前NodeJs还没法支持ES6. 因此目前react、vue等框架使用的大多数模块都仍是使用的CommonJS标准。看到的多数是require写法,能够理解为使用require的写法使用范围更普遍,由于它是创建在es5标准之上的npm
CommonJS 做为 Node.js 的规范,一直沿用至今。因为 npm 上 CommonJS 的类库众多,以及 CommonJS 和 ES6 之间的差别,Node.js 没法直接兼容 ES6。浏览器
因此现阶段 require/exports 任然是必要且实必须的。出自 ES6 的 import/export 相对就晚了许多。被你们所熟知和使用也是 2015 年以后的事了。
这其实要感谢 babel(原来项目名叫作 6to5,后改名为 babel) 这个神通常的项目。因为有了 babel 将还未被宿主环境(各浏览器、Node.js)直接支持的 ES6 Module 编译为 ES5 的 CommonJS —— 也就是 require/exports 这种写法 —— Webpack 插上 babel-loader 这个翅膀才开始高飞,你们也才能够称 " 我在使用 ES6! "服务器
2、AMD规范和CommonJS规范的区别:(参考:http://www.javashuo.com/article/p-fowgdsnn-k.html)babel
有了服务器端模块之后,很天然地,你们就想要客户端模块。并且最好二者可以兼容,一个模块不用修改,在服务器和浏览器均可以运行。框架
可是,因为一个重大的局限,使得CommonJS规范不适用于浏览器环境。仍是上一节的代码,若是在浏览器中运行,会有一个很大的问题
1
2
|
var
math = require('math');
math.add(2, 3);
|
第二行math.add(2, 3),在第一行require(‘math’)以后运行,所以必须等math.js加载完成。也就是说,若是加载时间很长,整个应用就会停在那里等。
这对服务器端不是一个问题,由于全部的模块都存放在本地硬盘,能够同步加载完成,等待时间就是硬盘的读取时间。可是,对于浏览器,这倒是一个大问题,由于模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于”假死”状态。
所以,浏览器端的模块,不能采用”同步加载”(synchronous),只能采用”异步加载”(asynchronous)。这就是AMD规范诞生的背景。
AMD是”Asynchronous Module Definition”的缩写,意思就是”异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。全部依赖这个模块的语句,都定义在一个回调函数中,等到加载完成以后,这个回调函数才会运行。