|
JavaScript诞生于1995年,一开始只是用于编写简单的脚本。
随着前端开发任务越来越复杂,JavaScript代码也越来越复杂,全局变量冲突、依赖管理混乱等问题变得十分突出,模块化成为一个必不可少的功能。
模块化发展史与方案对比
YUI 与 JQuery
2006年,雅虎开源了组件库YUI Library,使用类似于Java的命名空间的方式来管理模块:- YUI.util.module.doSomthing();
复制代码 同年,JQuery发布,使用IIFE和闭包的方法创建私有作用域,避免全局变量污染,这种管理模块的方法流行了一段时间。- (function(root) {
- // 模块内部变量和函数
- var data = 'Module Data';
- function getData() {
- return data;
- }
-
- // 将模块接口挂载到全局对象上
- root.myModule = {
- getData: getData
- };
- })(window);
- // 使用模块
- console.log(myModule.getData()); // 输出: Module Data
复制代码 当一个模块依赖于其它模块时:(ModuleB依赖于ModuleA和ModuleC)- (function(root, moduleA, moduleC) {
- // 模块B代码
- })(window, window.moduleA, window.moduleC);
复制代码 这种方法有以下缺点:
- 模块挂载到了全局对象上,仍然可能存在冲突;
- 缺乏标准化,不同程序员对这种方案的实现可能不同;
- 依赖管理困难,当依赖模块量比较大时,手动传递参数容易出错。
ServerJS, CommonJS 和 Node.js
2009年1月,Mozilla 的工程师制定了一套JavaScript模块化的标准规范,取名为ServerJS,规范版本为Modules/0.1。
同年4月,ServerJS更名为CommonJS。
ServerJS最初用于服务端的JS模块化,用于辅助自动化测试工作。
<blockquote>
在Node.js出现之前也有运行于服务端的JS,叫做Netscape Enterprise Server,它并不像Node.js,后者拥有访问操作系统文件系统,以及网络I/O等能力;而前者更像是早期的php,只是用于在服务端填充模板。更详细的介绍可以看
来源:https://www.cnblogs.com/feixianxing/p/18292777/nodejs-modules-commonjs-esmodules
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|