本文学习内容的概要:
- 模块化演变过程
- 模块化规范
- 常用的模块化打包工具
- 基于模块化工具构建现代web应用
- 打包工具的优化技巧
模块化演变过程
早期在没有工具和规范的情况下对模块化的落地方式:
stage1-文件划分方式:污染全局作用域,命名冲突问题,无法管理模块依赖关系,早期模块化完全依靠约定
stage2-命名空间方式:虽然解决了命名冲突但是其他问题没解决
stage3-IIFE(立即执行函数的方法):实现了私有成员的概念
模块化规范的出现
模块化标准+模块加载器
Commonjs规范(nodejs提出的一套标准)
- 一个文件就是一个模块
- 每个模块都有单独的作用域
- 通过module.exports导出成员
- 通过require函数载入模块
CommonJS是以同步模式加载模块
模块化标准规范
在nodejs中遵循CommonJS规范
在浏览器中遵循ES Modules规范
ES Modules特性
通过给script 添加 type = module的属性,就可以以ES Module的标准执行其中的JS代码
- ESM自动采用严格模式,忽略’use strict’
- 每个ES Module都是运行在单独的私有作用域中
- ESM是通过CORS的方式请示外部JS模块的
- ESM的script标签会延迟执行脚本(等页面都加载完了再去运行脚本)
ES Modules导出
ES Modules导入用法
动态加载模块