读 vue 源码1

vue 源码的下载和目录

  1. 项目地址:github.com/vuejs/vue
  2. 项目中最重要的就是 src 目录中的内容
doc 复制代码
├─compiler 编译相关,把 template 转换为 render 函数
├─core Vue 核心库
  ├─components 定义了 Vue 中自带的 keep-alive 组件
  ├─global-api 定义了 Vue 中的静态方法
  ├─instance 创建 Vue 实例的位置,定义了 Vue 中的构造函数、初始化以及生命周期钩子函数
  ├─observer 响应式机制实例的位置
  ├─util 公共方法
  ├─vdom 虚拟 DOM,重写了 snabbdom,增加了组件的机制
├─platforms 平台相关代码
  ├─web 浏览器
  ├─weex 移动端
├─server SSR,服务端渲染
├─sfc single file component,将 .vue 单文件编译为 js 对象
└─shared 公共的代码

vue2 中引入了 flow 进行类型检测,自己在官网学习

vue 源码的打包和调试

1. 打包工具:Rollup

Webpack 会把所有文件当作模块处理,而 Rollup 只处理 js。 开发项目适合使用 Webpack,开发库适合使用 Rollup。

2. 安装运行

注意切换到 dev 分支然后再 npm i 下载依赖

运行命令:

js 复制代码
"dev": "rollup -w -c scripts/config.js --sourcemap --environment TARGET:web-full-dev"
  • -w: watch 监视源码的变化,当源码变化时立即重新打包
  • -c: 设置配置文件,后面跟的 scripts/config.js 就是配置文件了
  • --environment: 设置环境变量,用于打包生成不同版本的 vue
  • --sourcemap: 开启代码地图

dist 目录下有很多 js 文件,这些 js 文件就是不同版本的 vue,此时并没有 .map 文件,我们先删除 dist 目录。

js 复制代码
npm run dev

会发现重新生成了 dist 目录,且目录下生成 vue.js 和 vue.js.map 文件,.map 文件记录了 src 中的源码和我们打包生成的 vue.js 之间的关系,其他版本的 vue 需要通过 npm run build 命令生成。

3. 调试:

  1. 打开 examples\grid\index.html 文件,其中引入的是 ../../dist/vue.min.js 文件,我们要改成 ../../dist/vue.js。
  2. 在浏览器访问这个 index.html,打开控制台,在 Sources 我们可以看到 dist 和 src 目录,只有开启了 sourcemap,才可以在这里看到 src 目录。
  3. 然后打开 grid.js,找到创建 Vue 的位置打上断点,就可以进入 Vue 源码进行调试啦。
  • 不同版本之间 Vue 的区别:

首先通过 npm run build 打包出不同版本的 vue

经过总结,我们可以得出命名规则: 'vue' + 'runtime'/'' + ''/'common'/'esm' + 'js'

  1. 'runtime'/'':此字段表示vue是否为运行时版本
  • 编译器:将 template 编译成为 render 渲染函数的代码,体积大、效率低。
  • 运行时版本:用来创建 Vue 实例、渲染并处理虚拟 DOM 等的代码,体积小、效率高。不支持 template,我们需要使用 render 代替。名称中包含 runtime 的就是运行时版本。
  • 完整版:编译器 + 运行时版本,名称中不包含 runtime 的就是完整版本。
  1. ''/'common'/'esm':此字段表明vue文件的模块方式
  • 没有标明模块方式的文件就是 UMD 版本。
  • 标明 common 的文件使用的就是 CommonJS。
  • 标明 esm 的文件使用的就是 ES Modules,这是当前最主流的模块方式。

Vue-CLI 创建的项目默认使用的是 vue.runtime.esm.js

相关推荐
Neweee5 分钟前
JavaScript进阶内容详解
前端
大鸡爪6 分钟前
Vue3 组件库实战(五):Icon 图标组件的设计与实现
前端·vue.js
bluceli6 分钟前
前端测试实战指南:构建高质量代码的完整体系
前端·测试
行走的陀螺仪7 分钟前
前端公共库开发保姆级路线:从0到1复刻VueUse官方级架构(pnpm+Turbo+VitePress)
前端·架构
顽固_倔强7 分钟前
深入理解 Vue3 数据绑定实现原理
前端·面试
前端付豪7 分钟前
组件拆分重构 App.vue
前端·架构·代码规范
Wect8 分钟前
React 更新触发原理详解
前端·react.js·面试
cxxcode8 分钟前
Web 帧渲染与 DOM 准备
前端
光影少年8 分钟前
React Hooks的理解?常用的有哪些?
前端·react.js·掘金·金石计划
大鸡爪9 分钟前
Vue3 组件库实战(七):从本地到 NPM:版本管理与自动化发布指南(下)
前端·vue.js