热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vue源码解析源码目录及源码调试运行

 目录前言1代码结构1.1octotree插件1.2vue工程项目目录1.3主要代码目录srccompilercoreplatformsserversfcshared2下载代码并运

 

目录
  • 前言
  • 1 代码结构
    • 1.1 octotree插件
    • 1.2 vue工程项目目录
    • 1.3 主要代码目录src
      • compiler
      • core
      • platforms
      • server
      • sfc
      • shared
  • 2 下载代码并运行构建
    • 2.1 源代码下载
    • 2.2 打开项目安装依赖
    • 2.3 package.json 的 scripts 配置中添加 --sourcemap
  • 3 编写demo进行调试

 

记住框架的api是能让我们熟练的使用框架,但优秀的施工人员和优秀的设计师,两者还是有本质的区别。框架的api是如何实现的,如果是我们通过源码调试找到的答案,相信一定会让自己印象深刻。学习源码的工程化编码风格,理解用到的设计模式,算法等,想必对自己的成长大有裨益。

1 代码结构

1.1 octotree插件

给大家安利一个github上看代码的小插件,octotree,https://www.octotree.io。可以看到vue2版本的项目结构如下图。

Vue源码解析-源码目录及源码调试运行

1.2 vue工程项目目录

可以在控制台中运行tree命令,将目录成树状打印。

  ├─.circleci
  ├─.github
  ├─benchmarks
  ├─dist        ## 发布的目标目录
  ├─examples    ## vue相关的使用举例
  ├─flow        ## 针对flow的类型声明
  ├─packages    ## core核心代码之外的其他一些功能包
  ├─scripts     ## 项目构建脚本
  ├─src         ## vue主要源码
  ├─test        ## 对于vue相关api单元测试以及使用举例的端对端测试等
  └─types       ## TypeScript类型声明

1.3 主要代码目录src

vue.js主要实现逻辑都在src资源目录下,这里先对主要目录进行一个简单的描述。

  ├─compiler        ## 编译生成render函数相关
  │  ├─codegen
  │  ├─directives       
  │  └─parser
  ├─core            ## vue.js核心代码,实例化、响应式等
  │  ├─components       
  │  ├─global-api       
  │  ├─instance
  │  │  └─render-helpers
  │  ├─observer
  │  ├─util
  │  └─vdom
  │      ├─helpers      
  │      └─modules
  ├─platforms      ## vue.js 对web端和weex端的分别支持
  │  ├─web
  │  │  ├─compiler
  │  │  │  ├─directives
  │  │  │  └─modules
  │  │  ├─runtime
  │  │  │  ├─components
  │  │  │  ├─directives
  │  │  │  └─modules
  │  │  ├─server
  │  │  │  ├─directives
  │  │  │  └─modules
  │  │  └─util
  │  └─weex
  │      ├─compiler
  │      │  ├─directives
  │      │  └─modules
  │      │      └─recycle-list
  │      ├─runtime
  │      │  ├─components
  │      │  ├─directives
  │      │  ├─modules
  │      │  └─recycle-list
  │      └─util
  ├─server         ## 服务端渲染s-s-r相关
  │  ├─bundle-renderer
  │  ├─optimizing-compiler
  │  ├─template-renderer
  │  └─webpack-plugin
  ├─sfc            ## .vue单文件组件解析相关
  └─shared         ##  web端和服务端渲染的公共代码

compiler

这个目录包含编译相关的代码,简单来说就是将 vue 的 template 字符串模板解析成 ast 抽象语法树,进而转换为 render 渲染函数。

core

这个目录包含vue的核心代码,封装了通用的全局组件、全局api、构造函数、响应式、工具方法,虚拟dom等。

platforms

这个目录包含跨端实现的相关代码,内部主要扩展了对weex的跨端开发的支持。里面的weex目录是对weex端的适配,web目录是对浏览器端的适配。

server

这个目录包含服务端渲染s-s-r实现的相关代码。

sfc

这个目录包含对vue单文件组件解析的相关代码,主要功能是将.vue 文件的内容解析成,符合单文件组件 (SFC) 规范的js描述对象。 https://vue-loader.vuejs.org/zh/spec.html vue-loader 文档中也有提到。

shared

这个目录包含一些公共配置项和方法。vue的web端和s-s-r服务端渲染都可以使用。

2 下载代码并运行构建

这里主要先对 vue 的2版本的源码进行分析,vue-next 3版本新特性会在后续文章中进行分析,如基于proxy实现的数据响应式,虚拟dom等。

2.1 源代码下载

这里选择2版本中最新的2.6.12版本进行下载。

Vue源码解析-源码目录及源码调试运行

2.2 打开项目安装依赖

用 npm i 或者 yarn add all 进行依赖包的安装。

Vue源码解析-源码目录及源码调试运行

2.3 package.json 的 scripts 配置中添加 --sourcemap

添加 --sourcemap,运行npm run dev 或者 yarn dev 生成带编译器版本的vue.js和其对应的.map 文件。我们在编写demo调试的时候,引用dist/vue.js文件,通过vue.js.map,在浏览器中调试,就能关联到对应的源码文件。如图所示。

Vue源码解析-源码目录及源码调试运行

3 编写demo进行调试

在源码项目中创建自己的demo目录,写一个简单的示例。

Vue源码解析-源码目录及源码调试运行

  html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content=">
      <title>init demotitle>
      <script src="../dist/vue.js">script>
  head>
  <body>
      <div id="app">{{title}}div>
      <script>
          new Vue({
              data: {
                  title: "vue调试"
              }
          }).$mount("#app");
      script>
  body>
  html>

断点调试的时候,你就能看到 sidebar 中对应的源码src目录。

Vue源码解析-源码目录及源码调试运行

ctrl + p 可以搜索指定的源码文件

Vue源码解析-源码目录及源码调试运行

 

 

出处:https://www.cnblogs.com/elmluo/p/14738295.html

 

目录
  • 前言
  • 1 代码结构
    • 1.1 octotree插件
    • 1.2 vue工程项目目录
    • 1.3 主要代码目录src
      • compiler
      • core
      • platforms
      • server
      • sfc
      • shared
  • 2 下载代码并运行构建
    • 2.1 源代码下载
    • 2.2 打开项目安装依赖
    • 2.3 package.json 的 scripts 配置中添加 --sourcemap
  • 3 编写demo进行调试

 

记住框架的api是能让我们熟练的使用框架,但优秀的施工人员和优秀的设计师,两者还是有本质的区别。框架的api是如何实现的,如果是我们通过源码调试找到的答案,相信一定会让自己印象深刻。学习源码的工程化编码风格,理解用到的设计模式,算法等,想必对自己的成长大有裨益。

1 代码结构

1.1 octotree插件

给大家安利一个github上看代码的小插件,octotree,https://www.octotree.io。可以看到vue2版本的项目结构如下图。

Vue源码解析-源码目录及源码调试运行

1.2 vue工程项目目录

可以在控制台中运行tree命令,将目录成树状打印。

  ├─.circleci
  ├─.github
  ├─benchmarks
  ├─dist        ## 发布的目标目录
  ├─examples    ## vue相关的使用举例
  ├─flow        ## 针对flow的类型声明
  ├─packages    ## core核心代码之外的其他一些功能包
  ├─scripts     ## 项目构建脚本
  ├─src         ## vue主要源码
  ├─test        ## 对于vue相关api单元测试以及使用举例的端对端测试等
  └─types       ## TypeScript类型声明

1.3 主要代码目录src

vue.js主要实现逻辑都在src资源目录下,这里先对主要目录进行一个简单的描述。

  ├─compiler        ## 编译生成render函数相关
  │  ├─codegen
  │  ├─directives       
  │  └─parser
  ├─core            ## vue.js核心代码,实例化、响应式等
  │  ├─components       
  │  ├─global-api       
  │  ├─instance
  │  │  └─render-helpers
  │  ├─observer
  │  ├─util
  │  └─vdom
  │      ├─helpers      
  │      └─modules
  ├─platforms      ## vue.js 对web端和weex端的分别支持
  │  ├─web
  │  │  ├─compiler
  │  │  │  ├─directives
  │  │  │  └─modules
  │  │  ├─runtime
  │  │  │  ├─components
  │  │  │  ├─directives
  │  │  │  └─modules
  │  │  ├─server
  │  │  │  ├─directives
  │  │  │  └─modules
  │  │  └─util
  │  └─weex
  │      ├─compiler
  │      │  ├─directives
  │      │  └─modules
  │      │      └─recycle-list
  │      ├─runtime
  │      │  ├─components
  │      │  ├─directives
  │      │  ├─modules
  │      │  └─recycle-list
  │      └─util
  ├─server         ## 服务端渲染s-s-r相关
  │  ├─bundle-renderer
  │  ├─optimizing-compiler
  │  ├─template-renderer
  │  └─webpack-plugin
  ├─sfc            ## .vue单文件组件解析相关
  └─shared         ##  web端和服务端渲染的公共代码

compiler

这个目录包含编译相关的代码,简单来说就是将 vue 的 template 字符串模板解析成 ast 抽象语法树,进而转换为 render 渲染函数。

core

这个目录包含vue的核心代码,封装了通用的全局组件、全局api、构造函数、响应式、工具方法,虚拟dom等。

platforms

这个目录包含跨端实现的相关代码,内部主要扩展了对weex的跨端开发的支持。里面的weex目录是对weex端的适配,web目录是对浏览器端的适配。

server

这个目录包含服务端渲染s-s-r实现的相关代码。

sfc

这个目录包含对vue单文件组件解析的相关代码,主要功能是将.vue 文件的内容解析成,符合单文件组件 (SFC) 规范的js描述对象。 https://vue-loader.vuejs.org/zh/spec.html vue-loader 文档中也有提到。

shared

这个目录包含一些公共配置项和方法。vue的web端和s-s-r服务端渲染都可以使用。

2 下载代码并运行构建

这里主要先对 vue 的2版本的源码进行分析,vue-next 3版本新特性会在后续文章中进行分析,如基于proxy实现的数据响应式,虚拟dom等。

2.1 源代码下载

这里选择2版本中最新的2.6.12版本进行下载。

Vue源码解析-源码目录及源码调试运行

2.2 打开项目安装依赖

用 npm i 或者 yarn add all 进行依赖包的安装。

Vue源码解析-源码目录及源码调试运行

2.3 package.json 的 scripts 配置中添加 --sourcemap

添加 --sourcemap,运行npm run dev 或者 yarn dev 生成带编译器版本的vue.js和其对应的.map 文件。我们在编写demo调试的时候,引用dist/vue.js文件,通过vue.js.map,在浏览器中调试,就能关联到对应的源码文件。如图所示。

Vue源码解析-源码目录及源码调试运行

3 编写demo进行调试

在源码项目中创建自己的demo目录,写一个简单的示例。

Vue源码解析-源码目录及源码调试运行

  html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content=">
      <title>init demotitle>
      <script src="../dist/vue.js">script>
  head>
  <body>
      <div id="app">{{title}}div>
      <script>
          new Vue({
              data: {
                  title: "vue调试"
              }
          }).$mount("#app");
      script>
  body>
  html>

断点调试的时候,你就能看到 sidebar 中对应的源码src目录。

Vue源码解析-源码目录及源码调试运行

ctrl + p 可以搜索指定的源码文件

Vue源码解析-源码目录及源码调试运行


推荐阅读
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了Java中Currency类的getInstance()方法,该方法用于检索给定货币代码的该货币的实例。文章详细解释了方法的语法、参数、返回值和异常,并提供了一个示例程序来说明该方法的工作原理。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
author-avatar
漂漂雪飘飘业_348
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有