Vue源码的下载启动
Vue源码地址
git clone git@github.com:vuejs/core.git
安装依赖
pnpm install
Vue 3和核心源码都在packages里面,其中每个目录代表的含义,如下所示:
compiler-core // 核心编译器(平台无关)
compiler-dom // dom编译器
compiler-sfc // vue单文件编译器
compiler-ssr // 服务端渲染编译
reactivity // 响应式模块,可以与任何框架配合使用
runtime-core // 运行时核心实例相关代码(平台无关)
runtime-dom // 运行时dom 关api,属性,事件处理
runtime-test // 运行时测试相关代码
server-renderer // 服务端渲染
sfc-playground // 单文件组件在线调试器
shared // 内部工具库,不对外暴露API
vue // 面向公众的完整版本, 包含运行时和编译器
目录模块
通过上面源码结构,可以看到有下面几个模块比较特别:
1.compiler-core
2.compiler-dom
3.runtime-core
4.runtime-dom
在package目录下,除了上面列举的4个目录外,还有reactivity目录比较重要,他是响应式模块的源码,由于Vue 3整体源码采用的Monorepo规范,所以其下面每个子模块都可以独立编译和打包,从而独立对外提供服务,在使用时采用require('@vue/reactivity')引入,进入reactivity目录下可以看到有对应的package.json文件。
Vue为什么这么设计?
Vue打包后的文件解析
cjs(用于服务端渲染)
vue.cjs.js
vue.cjs.prod.js(生产版,代码进行了压缩)
global(用于浏览器<script src="" />标签导入,导入之后会增加一个全局的Vue对象)
vue.global.js
vue.global.prod.js(生产版,代码进行了压缩)
vue.runtime.global.js
vue.runtime.global.prod.js(生产版,代码进行了压缩)
browser(用于支持ES6 Modules浏览器 <script type="module" src=""/> 标签导入)
vue.esm-browser.js
vue.esm-browser.prod.js(生产版,代码进行了压缩)
vue.runtime.esm-browser.js
vue.runtime.esm-browser.prod.js(生产版,代码进行了压缩)
bundler(这两个版本没有打包所有的代码,只会打包使用的代码,需要配合打包工具来使用,会让Vue体积更小)
vue.esm-bundler.js
vue.runtime.esm-bundler.js
不同构建版本的Vue源文件需要在不同的平台和环境中使用,便于开发者可以选择合适的场景来使用