vue我爱编程

Vue源码探究-源码文件组织

2018-05-31  本文已影响0人  喜欢唱歌的小狮子

Vue源码探究-源码文件组织

源码探究基于最新开发分支,当前发布版本为v2.5.17-beta.0

Vue 2.0版本的大整改不仅在于使用功能上的优化和调整,整个代码库也发生了天翻地覆的重组。可见随着使用者的增加与声名传播,Vue自身的格局发生了很大的突破,特别体现在对Weex框架做了内部支持。不管在未来是使用Weex或者与NativeScript结合做跨平台应用开发,都还是能与React、Angular保持三足鼎立的势头。

Vue的github仓库根目录

先来大致了解一下整个项目的结构(摘译自官方说明文档):

以下是官方文档未列出说明的文件夹,好奇宝宝抱着刨根问底的决心一并在此列出:

根目录下的其他配置文件相信大家都心知肚明有什么作用,不在此赘述了。

基于以上的大致了解,发现除 flowsrc 目录外,其他的文件夹主要都是用来服务于Vue项目组织和构建的,在源码探究的旅途中可以将他们剔除。由于 flow 文件夹里包含了一些预先定义好的静态类型,是与源码编写相关的,还是需要浏览一下。接下来,继续详细的探索一下 src 源码文件夹的组织结构。

Vue的src源码目录

Vue最新版本的源码文件夹下分为6个目录compilercoreserverplatformssfcshared。作者在CONTRIBUTING.md也说明了它们的内容,但在其文档中types文件夹已经被移出到根目录下了,这里没有修改。

Compiler 编译器

包含模板到渲染函数编译器的代码。

拆分原因:1.0版本中就把编译器的功能存放在独立文件夹中,2.0之后的版本进行了调整和优化,可以更好地组织编译器相关功能的代码。

编译器由解析器、优化器、代码生成器组成,另外还有生成编译器、指令相关等一些代码。

编译器的主要构成部分:

编译器具体的实现功能在另一篇文章模板编译的实现中进行探讨。

Core 核心

组织与平台无关的通用运行时代码,即与平台解耦,在任何支持Javascript运行的环境下都可以运行。

拆分原因:随着2.0版本区别出了web和weex跨平台两端的开发支持,在不同平台下的编译和运行时都有区别,所以将核心通用的代码提取到独立文件夹中组织,并且不包含那些将要根据不同平台调整的相关代码,如编译器。

核心代码包括2.0版本中最基础的代码部分:

Platforms 平台

平台专有代码存放在这个目录中,以不同的平台组成子目录。

拆分原因:2.0版本后在内部支持与Weex框架的融合,与web端的应用开发相区分。

目前分离了出了两个部分:web端开发和weex框架所涉及跨平台开发,分别包含了一些编译器和运行时的不同代码。

Server 服务器渲染

包含服务端渲染的相关代码。

拆分原因:2.0版本后开发了支持服务端渲染的新功能

Sfc 单文件组件文件编译

这一文件夹目前只包含了一个叫parser.js的文件,用来将单文件组件解析为SFC描述对象,输出给编译器继而执行模板编译。

拆分原因:单独抽离解析vue单文件组件的逻辑

Shared 共享常量和函数

Shared是2.0版本之后增加的用来组织共享变量和辅助函数的文件夹,主要从之前的辅助函数文件里抽取出来,在后来的开发中也继续添加了其他函数和常量,从其中包含的constants.js和util.js两个文件的名称中也能显而易见此文件夹的作用。

拆分原因:更好的组织代码


关于为何要花心思来分析一个项目的文件组织方式和目录结构,并不是因为我有着一套成熟的学习项目源代码的方式,而是因为我觉得可能会有一些人与我一样,无法任由那些不懂的东西残留在视线范围内,所以到此为止,带着各种问题探索完了Vue仓库的文件组织,感觉自己对于整个Vue项目的组织有了更深入的了解,为继续解读具体功能的实现排除了无关影响因素,扫清了路障。如有问题欢迎大家指正。

上一篇下一篇

猜你喜欢

热点阅读