读 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

相关推荐
逐·風3 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫4 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦4 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子5 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山5 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享5 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
清灵xmf7 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询
大佩梨7 小时前
VUE+Vite之环境文件配置及使用环境变量
前端
GDAL8 小时前
npm入门教程1:npm简介
前端·npm·node.js
小白白一枚1118 小时前
css实现div被图片撑开
前端·css