工程化?
当项目规模变大时,就会出现很多问题,这就是工程化要解决的问题。
出现的问题
全局污染问题
- 随着JS文件数量和代码量的增加
- 全局变量同名的几率将会陡然上升
- 开发人员不得不耗费大量的精力来规避
依赖混入问题
在js中先引入哪个模块,后引入哪个模块
模块化
用来解决全局污染和依赖混入问题
- 官方标准:ES Module
- 社区标准:CommonJS、AMD、CMD、UMD
特性 | AMD | CMD | UMD |
---|---|---|---|
全称 | Asynchronous Module Definition | Common Module Definition | Universal Module Definition |
依赖声明 | 依赖前置(开头声明) | 依赖就近(用时 require) | 兼容多种方式 |
加载方式 | 异步 | 异步 | 根据环境决定(异步或同步) |
主要用途 | 浏览器模块化 | 浏览器模块化(已式微) | 通用库,多环境兼容 |
代表工具 | RequireJS | Sea.js | 无特定工具,是一种写法模式 |
是否主流 | 曾主流,现逐渐被 ES Module 取代 | 已不常用 | 仍广泛用于第三方库兼容 |
包管理
模块化出现后,出现了大量的第三方库,这么多第三方库,如何管理?
- npm
- yarn
- pnpm