1. 什么是模块化
模块化是指将一个复杂的系统分解成多个模块的一种解决方案。
2. CommonJS
1. 核心思想:
- 通过required方法来同步加载依赖的其他模块,通过module.exports导出需要暴露的接口。
2. 优点:
- 代码可复用于node.js环境下并运行,例如同构应用;
- 通过npm发布的很多第三方模块都采用了commonjs规范;
3. 缺点:
- 浏览器环境下无法运行,需要通过工具编译转换成标准的ES5。
3. AMD(Asynchronous_module_definition)
1. 核心思想:
- 通过required方法来异步加载依赖的其他模块,通过define导出需要暴露的接口。
2. 优点:
- 可在浏览器环境下直接运行,无需通过编译转换成标准的ES5。
- 可异步加载依赖,可并行加载多个依赖
- 代码可同时运行在浏览器及nodejs环境下
3. 缺点:
- JS原生运行环境没有支持AMD,需引入AMD库后才能正常运行。<br />
4. ES6模块化
1. 核心思想:
- ECMA提出的JS模块化规范,语言层面上实现了模块化,通过import导入,export导出。
2. 优点:
- 成为浏览器和服务器通用模块的解决方案。
3. 缺点:
- 无法直接运行在大部分js运行环境下,需通过工具编译转换成标准的ES5
5. 为什么使用构建工具:
1. 原因:
- 前端某些新技术及框架的源代码无法在JS运行环境下直接运行,需通过构建工具转换成标准的ES5后才能直接运行。
2. 构建需要做的事(包括如下):
- 代码转换:将TS编译成JS,将LESS编译成CSS等。
- 文件优化:压缩JS,CSS,HTML代码,压缩图片等。
- 代码分割:提取多个页面的公共代码,提取首屏不需要执行部分的代码让其异步加载。
- 模块合并:在采用模块化的项目里会有很多个模块和文件,需要通过构建功能将模块分类合并成一个文件。
- 自动刷新:监听本地源代码的变化,自动重新构建、刷新浏览器。
- 代码校验:在代码被提交到仓库前需要校验代码是否符合规范,以及单元测试是否通过。
- 自动发布:更新代码后,自动构建出线上发布代码并传输给发布系统。
6.为什么使用Webpack:
- 目前大多数团队在开发新项目时都会采用新技术,这此新技术几乎都会采用"模块化+新语言+新框架",webpack为这些新项目提供一站式的解决方案。
- webpack有良好的生态链和维护团队,能提供良好的开发体验及质量。
- webpack被全世界大量的前端开发者使用和验证,能找到各个层面出现的问题及解决方案。