vue3.0更加注重模块上的拆分,在2.0版本中所有vue相关的逻辑都相互耦合在一起,就算仅仅使用vue的一小部分,也需要引入完成的vue,造成了空间的浪费,而vue3则在模块层面上进行拆分,通过tree-shaking实现按需导入,减少用户打包体积,同时每个项目单独管理,单独发布,更加具备稳定性
模块拆分成npm包,独立使用,独立发布
虽然底层出现大量改动,但是顶层设计理念没有发生改变,依旧是声明式架构。
Monorepo:
- 一个仓库下可以维护多个模块
- 方便版本管理,依赖管理,模块间引用。
搭建vue3仓库
通过pnpm初始化项目
1 | pnpm init |
创建Monorepo仓库环境
新建文件夹packages
新建文件pnpm-workspace.yaml
1 | packages: |
安装公共依赖
项目根目录执行
1 | pnpm install vue -w // w 为workspace-root的缩写,代表该包为全局依赖 |
幽灵依赖
vue依赖了abc包,我们下载vue的时候abc包就被下载到项目,我们可以直接使用abc,但是vue可能在某一个版本就不再使用abc,这就会造成依赖丢失,这些依赖就被成为幽灵依赖
生成相关配置信息
创建packages内部的package环境
通过
1 | pnpm tsc --init |
生成ts默认配置文件
并且增加配置
1 | "baseUrl": ".", |
实现构建流程
- 编写每个组件的package.json
- 编写公共打包文件,可以打包packages中的所有库
- 编写esbuild打包代码