news 2026/4/16 17:50:58

剖析源码Vue项目结构 (一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
剖析源码Vue项目结构 (一)

一.掌握源码目录的结构

#1.介绍Vue整个目录结构

  • .circleci 持续集成
  • benchmarks 性能评测
  • dist 输出目录
  • examples 案例
  • flow flow声明文件
  • packages vue中的包
  • scripts 工程化
  • src 源码目录
  • test 测试相关
  • types ts声明文件

#2.介绍Vue源码的目录结构

为了直观的查看目录我们可以通过tree命令来查看src目录下的文件夹。先大概对源码的结构有一个大体的认识。

├─compiler # 编译的相关逻辑 │ ├─codegen │ ├─directives │ └─parser ├─core # vue核心代码 │ ├─components # vue中的内置组件 keep-alive │ ├─global-api # vue中的全局api │ ├─instance # vue中的核心逻辑 │ ├─observer # vue中的响应式原理 │ ├─util │ └─vdom # vue中的虚拟dom模块 ├─platforms # 平台代码 │ ├─web # web逻辑 - vue │ │ ├─compiler │ │ ├─runtime │ │ ├─server │ │ └─util │ └─weex # weex逻辑 - app │ ├─compiler │ ├─runtime │ └─util ├─server # 服务端渲染模块 ├─sfc # 用于编译.vue文件 └─shared # 共享的方法和常量

到这里可能你只能看的懂文件夹的组成,还无法知道代码是如何运行的,so~ 你需要通过package.json来查找代码是如何被打包的!

#二.打包流程

"build": "node scripts/build.js", "build:ssr": "npm run build -- web-runtime-cjs,web-server-renderer", "build:weex": "npm run build -- weex",

核心是使用node执行scripts/build.js,通过传递参数来实现不同的打包结果,这里的--代表后面的内容是参数。

build.js

既然是打包,那我们肯定要找到打包的入口点,所以这里的关键就是查找打包的入口!

// 1.获取不同的打包的配置 let builds = require('./config').getAllBuilds() // 2.根据执行打包时的参数进行过滤 if (process.argv[2]) { const filters = process.argv[2].split(',') builds = builds.filter(b => { return filters.some(f => b.output.file.indexOf(f) > -1 || b._name.indexOf(f) > -1) }) } else { // 默认不打包weex相关代码 builds = builds.filter(b => { return b.output.file.indexOf('weex') === -1 }) } // 3.进行打包 build(builds)

不同的打包配置指的是:

  • web/weex不同的平台

    这里我们不关注weex,web指代的就是我们常用的vue

  • Runtime only/Runtime + compiler是否带编译模块

    带有compiler的会将模板转化成render函数

  • CommonJS/es/umd打包出不同模块规范

    umd模块是整合了CommonJS和AMD两个模块定义规范的方法,当不支持时两种模块时会将其添加到全局变量中

打包入口

src/platforms/web/entry-runtime.js src/platforms/web/entry-runtime-with-compiler.js

我们可以通过打包的配置找到我们需要的入口,这两个区别在于是否涵盖compiler逻辑,我们在开发时一般使用的是entry-runtime,可以减小vue的体积,但是同样在开发时也不能再使用template,.vue文件中的template是通过vue-loader来进行编译的,和我们所说的compiler无关哈。

new Vue({ template:`<div></div>` })

这样的template必须要使用带compiler的入口才能进行模板的解析

#三.入口分析

这里为了剖析vue完整的代码,我们就来分析带有compiler的文件。

我们观察这两个入口的文件不难发现他们都引入了runtime/index.js

entry-runtime-with-compiler.js

import Vue from './runtime/index' // 1.引入运行时代码 const mount = Vue.prototype.$mount; // 2.获取runtime中的$mount方法 Vue.prototype.$mount = function (el,hydrating) { // 3. 重写$mount方法 el = el && query(el) const options = this.$options if (!options.render) { // 4.没有render方法就进行编译操作 let template = options.template if(template){ // 5.将模板编译成函数 const { render, staticRenderFns } = compileToFunctions(template, { outputSourceRange: process.env.NODE_ENV !== 'production', shouldDecodeNewlines, shouldDecodeNewlinesForHref, delimiters: options.delimiters, comments: options.comments }, this) options.render = render // 6.将render函数放到options中 } // todo... } return mount.call(this, el, hydrating) // 7.进行挂载操作 } export default Vue

带有compiler的文件仅仅是对$mount方法进行了重写,增添了将template变成render函数的功能

#四.Vue的构造函数

  • instance/index.js真正的Vue的构造函数,并在Vue的原型上扩展方法
  • core/index.js增加全局API方法
  • runtime/index.js扩展$mount方法及平台对应的代码

到此为止我们就将文件关联起来了。下一步我们就开始来分析细节吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 13:02:55

3D高斯泼溅技术:从模糊到清晰的场景重建革命

在计算机图形学的演进历程中&#xff0c;3D高斯泼溅技术正以其独特的渲染方式重新定义着场景重建的标准。这项技术不再依赖传统的多边形网格&#xff0c;而是通过统计分布的方式实现了前所未有的渲染效率和视觉质量。 【免费下载链接】gsplat CUDA accelerated rasterization o…

作者头像 李华
网站建设 2026/4/15 18:59:47

无需本地下载!Qwen3-VL内置模型直接网页端推理操作指南

无需本地下载&#xff01;Qwen3-VL内置模型直接网页端推理操作指南 在今天的多模态AI浪潮中&#xff0c;一个现实问题始终困扰着开发者和普通用户&#xff1a;如何在不拥有高端GPU、不折腾环境配置的前提下&#xff0c;真正用上最先进的视觉-语言大模型&#xff1f;答案正在变得…

作者头像 李华
网站建设 2026/4/16 9:17:27

Evernote数据备份终极指南:3步保护你的数字资料

Evernote数据备份终极指南&#xff1a;3步保护你的数字资料 【免费下载链接】evernote-backup Backup & export all Evernote notes and notebooks 项目地址: https://gitcode.com/gh_mirrors/ev/evernote-backup 还在担心Evernote笔记意外丢失的风险吗&#xff1f;…

作者头像 李华
网站建设 2026/4/16 10:52:34

Proteus下载安装包获取途径全面讲解

从零开始搭建电子仿真环境&#xff1a;Proteus安装与实战入门全指南 你是不是也曾在深夜翻遍百度、知乎、CSDN&#xff0c;只为找一个“能用”的Proteus下载链接&#xff1f;点开十几个网盘链接&#xff0c;结果不是404就是弹出一堆广告&#xff1b;好不容易下完&#xff0c;安…

作者头像 李华
网站建设 2026/4/16 9:20:22

低成本运行Qwen3-VL:消费级显卡也能跑通4B视觉语言模型

低成本运行Qwen3-VL&#xff1a;消费级显卡也能跑通4B视觉语言模型 在一张RTX 3090上&#xff0c;本地加载一个能“看懂”图像、理解界面、回答问题甚至生成代码的多模态大模型——这在过去可能是实验室或云服务器上的专属体验。但今天&#xff0c;借助通义千问最新推出的 Qwen…

作者头像 李华
网站建设 2026/4/16 8:40:53

Qwen3-VL电磁辐射可视化:场强分布图像重构

Qwen3-VL电磁辐射可视化&#xff1a;场强分布图像重构 在无线通信基站密集部署的城市环境中&#xff0c;如何快速评估其对周边居民区的电磁影响&#xff1f;传统方法依赖昂贵的仿真软件和专业工程师逐帧分析数据&#xff0c;流程繁琐且难以直观呈现。而如今&#xff0c;一种全新…

作者头像 李华