前端工程化
1. 模块化
1.1 什么是模块化
- 将一个复杂的程序依据一定的规则封装成几个块,并进行组合在一起
- 块的内部数据与实现是私有的,只向外部暴露一些接口(方法)与外部其他模块通信
1.2 模块化的进行过程
- 全局function模式:将不同的功能封装成不同的全局函数
编码:将不同的功能封装成不同的全局函数
问题:污染全局命名空间,容易引起命名冲突或数据不安全,模块之间看不出关系 - namespace模式:简单对象封装
作用:减少全局变量,解决命名冲突
问题:数据不安全 - IIFE模式:匿名函数自调用(闭包)
作用:数据是私有的,外部只能通过暴露的方法操作
编码:将数据和行为封装到一个函数内部,通过给window添加属性来向外暴露接口
问题:如果当前这个模块依赖另一个模块怎么办? - IIFE模式增强:引入依赖
1.3 模块化的好处
- 避免命名冲突
- 更好的分离,按需加载
- 更高复用性
- 高可维护性
1.4 引入多个script后出现问题
- 请求过多
- 依赖模糊
- 难以维护
2. AST
2.1 什么是AST
抽象语法树,源代码的抽象语法结构的树状表现形式。
2.2 词法分析和语法分析
JS是解释型语言,通过词法分析->语法分析->语法书,执行。
词法分析:扫描,将字符流转换为记号流(token),读取代码按照一定的规则合成一个个的标识。
语法分析:解析器,将词法分析出来的数组转换成树的形式,验证语法。有错则报错。
2.3 AST过程
- 语法检查、代码风格检查、格式化代码、语法高亮、错误提示、自动补全等
- 代码混淆压缩
- 优化变更代码,改变代码结构等
3. babel工作原理
解决了ES6兼容问题,把ES6代码转换为ES5代码,用了AST。
配置presets,plugins使用插件
访问者模式,访问某一个路径的时候进行匹配,然后在节点修改
引入babel插件,使用babel对代码进行转换,过程会改变AST语法树,然后生成新代码
3.1 babylon
babel使用的引擎是Babylon