Vue.js源码解读前的准备工作

前言

Vue.js最终是导出给外部使用的。所以在源码中,我们需要先找到 "入口文件",它作为一个出发点,找到它之后可以看其他文件的实现。

怎么找"入口文件"呢?

  1. 将 vue.js(以 v.2.6.14,也是 2.6 版本的终结版)clone 到本地之后,在一级目录中有一个 .github 的文件夹,里面的有一个 CONTRIBUTING.md 文件,可以查看 常用的 NPM 脚本;

可以看到 vue.js 的构建命令是 npm run dev;

  1. 现在我们进入 package.json 文件,看scripts下的 dev 脚本,得知 vue.js是使用 rollup 打包的,脚本文件在 scripts/config.js 中,此时的 environment 为 TARGET:web-full-dev,先记住这个值,后面会用到;
  1. 现在进入到 scripts/config.js 文件,看代码最后(一般导出的代码是放在最后);
js 复制代码
if (process.env.TARGET) { // 这里的 process.env.TARGET 就是 刚刚的 web-full-dev(表示此时的环境)
  module.exports = genConfig(process.env.TARGET)
} else {
  exports.getBuild = genConfig
  exports.getAllBuilds = () => Object.keys(builds).map(genConfig)
}
  1. 此时看到 genConfig函数,进入这个文件(这个函数也在此文件中定义);

可以看到,我们要找的就是 input(入口)对应的值,也就是截图里面的序号 2。要得到 2,首先需要知道 序号 1 中 builds在干嘛?

  1. 现在进入 builds对象(也在此文件中定义),我们知道 buildsname中,name === 'web-full-dev',所以找到builds对象中键为 'web-full-dev' 所对应的 value,并且找到 entry 属性。发现有一个 resolve方法;
  1. 进入到 resolve方法。其实就是获取入口文件路径的。具体细节现在不需要弄清楚,因为此时是为了找到入口的。只要知道这段代码的作用是获取路径: src/platforms/web/entry-runtime-with-compiler.js,因此找到了打包的开始文件。
  1. 进入 entry-runtime-with-compiler.js 文件,看到 import Vue from './runtime/index',根据 import 继续找定义 Vue 的文件;
  1. 进入到 ./runtime/index,发现 Vue 是从外层导进来的( import Vue from 'core/index');
  1. 进入到 core/index文件,继续进入 './instance/index' 文件;
  1. 好,入口找到了。下面才可以真正算看 Vue 源码。

总结

找到"入口文件"的过程,其实就是从 npm 脚本出发,然后通过一层一层的函数调用,字符串拼接,最后找到入口文件路径。这个过程中有实现这条主线路的细枝末节会干扰大家,暂时先不用管,知道它是干嘛的就行,具体可以后面感兴趣看。

相关推荐
何何____24 分钟前
Vue 全局事件总线详解
前端·javascript·vue.js
EatFan1 小时前
Go语言全栈实战:基于 Gin + Vue + JWT + RBAC 从零搭建前后端分离权限管理系统
vue.js·golang·go·vue·gin·jwt·rbac
陈拉斯3 小时前
Vue SPA 站百度收录“全军覆没“?一次预渲染抢救的完整实战(2026 踩坑版)
vue.js
一 乐14 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
wengad16 小时前
从 wangEditor 迁到 wangEditor-next
前端·javascript·vue.js
FYKJ_201019 小时前
django电影推荐系统55066-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
qq_3168377519 小时前
阿里云百炼 fun-asr-realtime uniapp vue3 调用
javascript·vue.js·uni-app
MZ_ZXD00120 小时前
【关注可白嫖源码】--课程设计--毕业设计-- 00904基于Springboot+MySQL的家政平台系统(案件分析)
源码·课程设计·毕设·大作业·程序开发·程序定制·毕设代做
李剑一20 小时前
AntDesign老版本没有月份和年份区间选择组件?我封装了一个完美版,附源码!
前端·vue.js
MZ_ZXD00120 小时前
【关注可白嫖源码】--课程设计--毕业设计-- 82355基于LLM和数字人的虚拟面试系统(案件分析)
源码·课程设计·毕设·大作业·程序开发·程序定制·毕设代做