tech share
  • tech-share
  • Engineering
    • 登录鉴权
    • SSR 页面路由
    • npm 版本号
    • 缓存
    • 数据库容灾
    • 动态效果导出 gif
    • Chrome-devtools
    • C 端 H5 性能优化
    • Docker
    • Monorepo 最佳实践
    • 技术架构演化
    • 项目规范最佳实践
    • snowpack
    • 静态资源重试
    • 前端页面渲染分析
    • Git
    • 前端重构
    • 微前端
    • 项目依赖分析
    • 前端监控原理
    • webpack
    • BS 架构与 CS 架构
    • HTTPS
    • package-lock.json 生成逻辑
    • SVN(Subversion)
    • 数据库分类
    • gulp
    • 前端架构
    • Bundle & Bundless
    • 控制反转 IoC
  • JavaScript
    • Javascript 性能
    • JavaScript 原型(2) - 原型与原型链
    • JavaScript 原型(1) - 构造函数
    • JavaScript - Promise
    • ES6 解构赋值
    • 前端离线化
    • Proxy
    • Object.defineProperty()简介
    • TypeScript
  • MachineLearning
    • GAN生成对抗网络
    • 虚拟对抗训练
    • 深度度量学习
    • 原型网络
    • PyTorch优化器
    • 隐马尔可夫模型2
    • Shapley Value 算法
    • Embarassingly Autoencoder算法
    • AutoRec算法及其后续发展
    • 深度学习常用激活函数
    • 序列预测ConvTran算法
    • 联邦学习
    • 深度学习推荐系统算法整理
    • 隐马尔可夫模型
    • 黎曼优化方法
    • FM算法
    • 机器学习常见评价指标
    • VAE算法
    • Adam优化器详解
    • Transformer算法
    • Self-attention 推荐算法
    • CNN 卷积神经网络
    • 图嵌入
    • 集成学习算法
    • RecBole开源框架
    • NCE-PLRec
    • 深度学习初始化方法
    • RNN循环神经网络
    • PyTorch数据处理
    • PyTorch安装和基本操作
    • XGBoost算法
    • NCF算法与简单MF的对比
    • 计算最佳传输
  • CSS
    • 什么是BFC
    • 纯CSS实现可拖动布局
    • 滚动穿透解决方案
  • React
    • React 生命周期
    • React Ref
    • React Hooks
    • SWR
    • React 数据流
    • React 函数式组件和类组件的区别
  • 可视化
    • OffscreenCanvas
    • Echarts 平滑曲线端点为什么不平滑
    • 颜色空间
    • 词云布局解析
    • 3D 数学基础
    • Canvas 图片处理
    • GLGL ES
    • WebGL 中绘制直线
    • Graphics API
    • 现代计算机图形学基础
    • Canvas 灰度
  • Vue
    • Vue2.x全局挂载整理
    • Vue2.6.x源码阅读
      • Vue2.6.x源码阅读 - 2.目录结构分析
      • Vue2.6.x源码阅读 - 4.源码阅读-platform
      • Vue2.6.x源码阅读 - 1.准备工作
      • Vue2.6.x源码阅读 - 5.源码阅读-core-Vue构造函数
      • Vue2.6.x源码阅读 - 7.源码阅读-core-响应式原理
      • Vue2.6.x源码阅读 - 3.源码阅读-shared
      • Vue2.6.x源码阅读 - 6.源码阅读-core-组件挂载
    • Vue + TypeScript Web应用实践
    • Vue2.x指令
    • nextTick()的使用
    • vue-cli2.x 的使用与项目结构分析
    • Vue响应式原理及总结
    • VueX的使用
    • Electron-Vue + Python 桌面应用实践
    • Vite
    • Vue组件通信整理
    • 记录一个问题的探索过程
  • Linux
    • memcg
  • GameDev
    • 游戏中的几种投影视图
    • 从零开始写软渲染器06
    • 从零开始写软渲染器05
    • 从零开始写软渲染器04
    • 从零开始写软渲染器03
    • 从零开始写软渲染器02
    • 从零开始写软渲染器01
    • 从零开始写软渲染器00
    • 现代游戏常用的几种寻路方案(一)
  • Node
    • NPM Dependency
    • Node 优势
    • Node Stream
    • Node 模块系统
  • HTML
    • html5语义与结构元素
  • 跨端
    • Flutter 介绍
  • Golang
    • Golang 基础
  • AR
    • SceneKit
由 GitBook 提供支持
在本页
  • Vue Web端入口
  • runtime vs runtime-with-compiler

这有帮助吗?

  1. Vue
  2. Vue2.6.x源码阅读

Vue2.6.x源码阅读 - 4.源码阅读-platform

上一页Vue2.6.x源码阅读 - 2.目录结构分析下一页Vue2.6.x源码阅读 - 1.准备工作

最后更新于4年前

这有帮助吗?

阅读学习Vue源码/src目录下的platform文件夹内的代码

  • 熟悉完工具类方法后继续从Vue的入口继续入手。从中,已经简单了解到platform就是整个Vue工程的入口处。兼容不同平台来对Vue做不同的启动处理。

Vue Web端入口

  • 通过入口文件中引入的Vue找到网页端下的构造函数所在的位置src/platform/web/runtime/index.js。查看其引入的内容,可以发现该入口下依旧引入了Vue,故可知当前文件则是在Web端下进行的封装。继续看后续的代码。

    // src/platform/web/runtime/index.js
    
    // import 部分
    import Vue from 'core/index' // core封装导出的Vue
    // ...
    
    // 挂载浏览器模式下的专用方法,对于开发者无用
    // install platform specific utils
    Vue.config.mustUseProp = mustUseProp
    Vue.config.isReservedTag = isReservedTag
    Vue.config.isReservedAttr = isReservedAttr
    Vue.config.getTagNamespace = getTagNamespace
    Vue.config.isUnknownElement = isUnknownElement
    
    // 在option中挂载指令与组件
    // install platform runtime directives & components
    extend(Vue.options.directives, platformDirectives)
    extend(Vue.options.components, platformComponents)
    
    // ⭐️使用 虚拟DOM 更新 真实浏览器DOM 的核心算法
    // install platform patch function
    Vue.prototype.__patch__ = inBrowser ? patch : noop // 非浏览器下不作操作,noop来自于上文中的util.js,等价于no operation
    
    // 挂载在Vue实例上的最原始的 $mount 方法,用于调用挂载组件的方法
    Vue.prototype.$mount = function (
      el?: string | Element,
      hydrating?: boolean
    ): Component {
      // 获取元素并调用 mountComponent 方法
      el = el && inBrowser ? query(el) : undefined
      return mountComponent(this, el, hydrating)
    }
    
    // 再往下的部分则为使用 vue-devtool 插件时才需要的逻辑,可以暂时不作考虑
    // devtools global hook
    /* istanbul ignore next */
    if (inBrowser) {
      // ...
    }
    
    export default Vue
  • 小结一下,Web端下的Vue入口文件做的工作主要为:

    1. 引入了core中的Vue

    2. 配置了用于转化虚拟DOM为真实DOM的__patch__方法

    3. 定义了原始的 $mount 方法

runtime vs runtime-with-compiler

上文所述的入口文件,为Web端通用的入口文件,在Web端下依旧存在五种运行模式,出去服务端渲染模式,重点部分为runtime与runtime-with-compiler两种模式。有对这两种模式的区别做过解释。

两种模式的入口文件分别对应于src/platform/web/entry-runtime.js、src/platform/web/entry-runtime-with-compiler两份文件。根据两份文件我们可以看出,单纯对运行时(runtime)仅仅引入了上文提及的Vue入口文件。而带编译器的运行时,内容更为复杂,主要为扩写了一个扩展的$mount方法(与“原始”的$mount方法做区分,该方法于进行解析)。也因此可知,带编译器的运行的内容更多,这也是官网推荐性能更好的“运行时”模式的原因。

2.目录结构分析
官网
6.源码阅读-core-组件挂载