模块化方案
2023-02-16
次访问
模块化方案
模块化优点
- 可维护性:每个模块都是单独定义的,之间相互独立
- 命名空间:为了避免在JavaScript中的全局污染,我们通过模块化的方式利用函数作用域来构建命名空间
- 可复用
模块化方案
揭示模块模式(Reveaing Module)
1 | var myRevealingModule = (function () { |
优点:
- 可以在任何地方实现(没有库,不需要语言支持)。
- 可以在单个文件中定义多个模块。
缺点:
- 无法以编程方式导入模块(除非使用eval)。
- 需要手动处理依赖关系。
- 无法异步加载模块。
4。 循环依赖可能很麻烦。 - 很难通过静态代码分析器进行分析。
CommonJS
CommonJS是服务器端模块的规范,Node.js采用了这个规范。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作(require 和 exports)
优点:
- 简单:开发人员可以在不查看文档的情况下掌握概念。
- 集成了依赖管理:模块需要其他模块并按所需顺序加载。
- require可以在任何地方调用:模块可以通过编程方式加载。
缺点:
- 同步API使其不适合某些用途(客户端)。
- 每个模块一个文件。
- 浏览器需要加载程序库或转换。
- 模块没有构造函数(Node支持)。
- 很难进行静态代码分析。
##### AMD
AMD规范则是异步加载模块,允许指定回调函数,通过返回一个对象做为模块对象
优点:
- 异步加载(更好的启动时间)。
- 支持循环依赖。
- require和的兼容性exports。
- 完全整合了依赖管理。
- 如有必要,可以将模块拆分为多个文件。
- 支持构造函数。
- 插件支持(自定义加载步骤)。
缺点:
- 语法稍微复杂一些。
- 除非编译,否则需要加载程序库。
- 很难分析静态代码。
- 除了异步加载以外,AMD的另一个优点是你可以在模块里使用对象、函数、构造函数、字符串、JSON或者别的数据类型,而CommonJS只支持对象。
UMD
统一模块定义(UMD:Universal Module Definition )就是将 AMD 和 CommonJS
合在一起的一种尝试,常见的做法是将CommonJS 语法包裹在兼容 AMD 的代码中。
ES6模块
支持JavaScript标准化的ECMA团队决定解决模块问题,
兼容同步和异步操作模式。
