我对这个文档的设计是全面理清Vue3+TypeScript+Webpack5+Vite2+Element-Plus+ECharts的知识内容,这些技术也是目前对公司vue项目进行升级和开发所需要的核心知识内容,为了能够使小组成员快速上手vue3+ts,我决心着手整理这个文档。
目前appadmin项目vue2.x版本下存在的不足
在vue2的使用过程中常常会遇到一些体验不太好的地方,比如:
- 随着功能的增长,需求的增加,复杂组件的代码越来越难以维护,逻辑混乱。虽然vue2也有一些复用的方法,但是都存在一定的弊端,比如:常用的Mixin,容易发生命名冲突,暴露出来的变量意图不明显,重用到其他组件容易冲突。
- vue2对于typeScript的支持非常有限,没有考虑到ts的集成。
vue3的出现在一定程度上就是为了解决vue2的弊端,其composition API
很好的解决了逻辑复用的问题,而且vue3源码就是用ts写的,对ts的支持非常好。我们在开发项目过程中可以使用ts的加持,使代码更加健壮。
该文档的核心内容
- Vue3核心知识解析;
- Vue-Router4.x、Vuex4.x、Composition API等解析;
- 基于Webpack5、Vite2分别搭建Vue3项目;
- TypeScript基础、高级语法解析、应用;
- Vue3、Vue-Router、Vuex、Hooks、Element-Plus、ECharts、TypeScript、Axios、Less的后台管理系统项目应用;
- 实际项目中的高级组件拆分、封装,项目架构设计等:
- Vue3项目的打包、优化、自动化部署等;
- Vue3相关的原理、源码分析等;
Vue3核心语法以及全家桶
首先从Vue3的基础开始聊起,会全面、详细的解析 Vue3的所有核心知识内容:
- 基础语法
- 组件化开发
- Vue3核心语法(2. Composition APl、Provide、Inject、Teleport、自定义Hook等)
- 过渡动画
也包括Vue3全家桶中的 Vue-Router4.x以及Vuex4.0的版本等,除语法层面外,我会尝试去阐述Vue3的各种原理,通过阅读部分核心源码,进一步理解Vue3。
Webpack5、vite2分别搭建Vue3开发环境
其次,在使用Vue CLI时会通过Webpack5和 Vite2分别搭建Vue的开发环境。
目前Vue的脚手架依然是基于 Webpack的,所以继续理清Webpack的相关技能依然尤为重要。
Vite工具推出后在前端社区引起了巨大的反响,并且在之后是有可能取代Webpack的,所以我们对Vite2进行分析和学习,然后再基于Vite2搭建Vue的开发环境。
TypeScript语法及类型思维
另外,会认真扒一扒TypeScript相关的语法,包括搭建TypeScript环境、TypeScript基础和高级语法的应用。
在后续公司的项目中,我期待也能直接使用TypeScript来进行编写,这样不仅仅学习了Type Script的语法,也可以彻底掌握TypeScript在工作中的运用,培养编程语言中的类型思维。
vue3带来的变化
源码层面
- 源码通过
monorepo
的形式来管理源代码- Mono:单个
- Repo:repository仓库
- 主要是将许多项目的代码存储在同一个repository中;
- 这样做的目的是多个包本身相互独立,可以有自己的功能逻辑、单元测试等,同时又在同一个仓库下方便管理;
- 而且模块划分的更加清晰,可维护性、可扩展性更强;
- 源码使用TypeScript来进行重写
- 在Vue2.x的时候,Vue使用Flow来进行类型检测;
- 在Vue3.x的时候,Vue的源码全部使用TypeScript来进行重构,并且Vue本身对TypeScript支持也更好了;
性能方面
- 使用Proxy进行数据劫持
- 在Vue2.x的时候,Vue2是使用Object.defineProperty来劫持数据的getter和setter方法的;
- 这种方式存在一个缺陷就是当给对象添加或者删除属性时,是无法劫持和监听的;
- 所以在Vue2.x的时候,不得不提供一些特殊的API,比如$set或$delete,事实上都是一些hack方法,也增加了开发者学习新的API的成本;
- 而在Vue3.x开始,Vue使用Proxy来实现数据的劫持;
- 删除了一些不必要的API:
- 移除了实例上的$on, $off 和 $once;
- 移除了一些特性:如filter、内联模板等;
- 包括编译方面的优化:
- 生成Block Tree、Slot编译优化、diff算法优化;
API方面
- 由Options API 到 Composition API:
- 在Vue2.x的时候,会通过Options API来描述组件对象;
- Options API包括data、props、methods、computed、生命周期等等这些选项;
- 存在比较大的问题是多个逻辑可能是在不同的地方:
- 比如created中会使用某一个method来修改data的数据,代码的内聚性非常差;
- Composition API可以将 相关联的代码 放到同一处 进行处理,而不需要在多个Options之间寻找;
- Hooks函数增加代码的复用性:
- 在Vue2.x的时候,我们通常通过mixins在多个组件之间共享逻辑;
- 但是有一个很大的缺陷就是 mixins也是由一大堆的Options组成的,并且多个mixins会存在命名冲突的问题;
- 在Vue3.x中,我们可以通过Hook函数,来将一部分独立的逻辑抽取出去,并且它们还可以做到是响应式的;
- 更具体的好处…;