模块化的演变过程
文件划分方式
早期的时候我们会将每一个文件当做一个模块,在使用的时候通过 script标签来引入模块,一个srcipt标签就是一个模块,然后我们就可以在页面中使用模块内部的方法或者变量,同时这种方式会有一些缺陷
- 因为模块在全局范围工作它并没有独立的私有空间,所以模块中的方法或变量可以在全局作用域中任意的访问和修改
- 模块引入过多的情况下会导致命名冲突
- 无法管理模块之间的依赖关系
所以早期模块化完全靠约定
命名空间方式
命名空间方式的意思就是说在文件划分方式的基础上暴露一个全局的对象,我们所有的模块成员都挂载到这个对象下
通过这种方式我们可以减少命名冲突的可能,但是这种方式模块仍然没有私有空间。所以我们的模块方法还是可以随意的被访问被修改,而且我们模块的依赖关系也没有被解决
IIFE(立即执行函数)
这里我们可以用IIFE的方式把模块放入一个函数提供的私有空间,对于需要暴露给外部的成员,我们直接挂载到全局对象的这种方式来是进行实现,这种方式实现了私有空间的概念,所以直接通过闭包的方式去访问,在外部无法使用,这样确保了私有成员的安全
我们还可以通过自执行函数的参数来进行依赖声明,在这里我们传入jquery,在后续进行维护的时候就可以知道,当前模块依赖jquery
总结:以上三种是早期没有工具和规范的情况下对模块化的落地方式,这些方式解决了我们前端模块化各种各样的问题,但是还是有一些没有解决的问题,这些问题我们需要单独来看。