1.模块化只是思想
2.模块化演变过程
1.文件划分方式
- 污染全局作用域
- 命名冲突
- 无法管理模块依赖关系
- 原始方式完全依靠约定
2.命名空间方式
3.IIFE
4.模块化规范+模块化加载器
- CommonJS,Node.js内置模块化方案
- 一个文件就是一个模块
- 每个模块都有单独的作用域
- 通过module.exports导出成员,exports是其缩写
- 通过require函数加载模块
- 在程序启动的时候,以同步的方式导入模块,这也决定了在web端是不能采用的方案,因为会导致加载模块的时候页面卡死
- AMD + require.js web端方案
- Cmd + sea.js web端方案,阿里出品,已淘汰
3.模块化标准规范 + 最佳实践
node.js采用Commonjs规范,web端采用ES Modules规范
ES Modules特性
- 自动采用严格模式,忽略'use strict'
- 每个ESM模块都是单独的私有作用域
- ESM是通过CORS去请求外部的js模块
- ESM的script标签会自动添加defer,延迟执行脚本。
ES Modules注意的地方
- ES Module可以导入CommonJS模块
- CommonJS不能导入ES Module模块
- CommonJS始终只会导出一个默认成员
- 注意import不是解构导入对象
- script标签上加入module代表以ES Module规范运行js模块化代码
- script标签上加入nomodule,在这里面存放的代码,代表浏览器不支持ES Module的话,执行这里的代码。