​ 写这篇文章的目的主要是为了扫盲与方便记忆,听说过太多种JavaScript中的模块化标准了,导致偶尔会混淆。所以干脆将他们都罗列出来,当做记录手册,什么时候又混淆了就拿出来看看。【这篇文章没有任何技术含量,仅仅是当做工作手册用,大家就看个乐呵】

JavaScript现有的模块化标准有:CommonJS、AMD、CMD、ES6模块化。

CommonJS

​ 已知webpack、nodeJS是遵循CommonJS的。

​ 引入语法: var math = require('math');。暴露语法:exports.increment = function (val) {}。【也可以用module.exports,module.exports === exports】

AMD

​ 由于CommonJS的require引用模块是同步到的,会堵塞后面的代码。即使在浏览器中也无法将引用任务置入异步任务队列中。所以CommonJS只适合服务端,在浏览器端是不可行的。

​ 所以我们急需异步加载的模块化能力。所以AMD也就出来了。

​ 引入语法:define(id, [depends], factory); ,暴露语法:require([module], callback);

​ require.js就是使用的AMD语法。只要我们在html文件中用 script 引入这个require.js文件,我们的前端项目就可以异步加载模块了。

​ 这是历史性的一大步,在浏览器端要想模块化不再是使用简陋的 script标签引入全局变量了,而是有了更加优雅的模块化方式。【也就是说原生的html是具有模块化功能的,后面引用的js文件可以使用前面引用的js文件的内容,只是这个方式太过简陋了】

​ 但为什么我们现在的项目里似乎都没有听说过有用require.js呢?

​ 这是因为因为webpack等打包编译工具的支持,使得我们能够在浏览器端直接写es6模块化语法了【切记,浏览器端是无法识别es6的模块化语法,不过因为webpack会将我们模块化代码编译成浏览器看的懂的代码,所以我们才能在项目中写es6模块化代码的】。

CMD

​ 也是一种异步加载模块的方式,其中sea.js使用的就是CMD语法。

​ 引入/暴露语法:define(function(require,exports,module){...});【在定义模块的同时引入模块】

ES6

​ 相信大家最熟悉的模块化应该就是ES6的模块化了。

​ 引入: import _ from 'loadash'。暴露语法: export {}

qzuser
19 声望0 粉丝