你应该听过 CommonJS、AMD、CMD、UMD、JS 模块化等等,这篇文章讲的就是这些名称都是什么意思,为什么会出现JS模块化,以及他们分别是如何实现JS模块化的。
最早,我们就是直接在 script 标签里写 JS 代码的
<script>
function add(a, b) {
console.log(a + b)
}
add(1, 2)
</script>
这时候就有几个问题,一个是代码复用,一个是全局作用域污染,还有就是可维护性问题。
随着代码的增加,这些问题越来越严重。所以首先出现了命名空间和匿名闭包 IIFE 模式,对代码进行封装,并通过提供外部方法来对它们进行访问。
var namespace = {}
namespace.add = function(a, b) {
console.log(a + b)
}
namespace.add(1, 2)
// IIEF
var utils = (function() {
var module = {}
module.multiply = function(a, b) {
console.log(a * b)
}
return module
}())
utils.multiply(1,2)
大多数流行的 JS 库,都使用这种模式,比如 jQuery,所有的函数都在一个全局对象 $ 中。然而,这还是至少需要一个全局变量,而且开发人员需要知道正确的依赖顺序,比如需要控制在 jQuery 加