美文网首页
vue文件底层逻辑怎么解析

vue文件底层逻辑怎么解析

作者: 却忘不掉你心言 | 来源:发表于2018-07-08 14:15 被阅读0次

    我们平时写的 .vue 文件称为 SFC(Single File Components),本文介绍将 SFC 解析为 descriptor 这一过程在 vue 中是如何执行的。

    vue 提供了一个 compiler.parseComponent(file, [options]) 方法,来将 .vue 文件解析成一个 descriptor:

    文件入口

    解析 sfc 文件的入口在 src/sfc/parser.js 中,该文件 export 了 parseComponent 方法, parseComponent 方法用来对单文件组件进行编译。

    接下来我们看看 parseComponent 方法都做了哪些事情。

    parseComponent 方法


    parseComponent 方法中定义了 start``end 两个函数,之后调用了 parseHTML 方法来对 .vue 文件内容践行编译。

    那么这个 parseHTML 方法是做啥的呢?

    parseHTML 方法

    该方法看名字就知道是一个 html-parser,可以简单理解为,解析到每个起始标签时,调用 option 中的 start;每个标签结束时,调用 option 中的 end。

    对应到这里,就是分别调用 parseComponent 方法中定义的 start 和 end 函数。

    在 parseComponent 中维护一个 depth 变量,在 start 中将 depth++ ,在 end 中 depth-- 。那么,每个 depth === 0 的标签就是我们需要获取的信息,包含 template、script、style 以及一些自定义标签。

    start

    每当遇到一个起始标签时,执行 start 函数。

    1、记录下 currentBlock。

    每个 currentBlock 包含以下内容:

    2、根据 tag 名称,将 currentBlock 对象在返回结果对象中。

    返回结果对象定义为 sfc,如果tag不是 script,style,template 中的任一个,就放在 sfc.customBlocks 中。如果是style,就放在 sfc.styles 中。script 和 template 则直接放在 sfc 下。

    2、depth-- 。

    得到 descriptor

    在将 .vue 整个遍历一遍后,得到的 sfc 对象即为我们需要的结果。

    生成 .js ?

    compiler.parseComponent(file, [options]) 得到的只是一个组件的 SFCDescriptor ,最终编译成.js 文件是交给 vue-loader 等库来做的。

    相关文章

      网友评论

          本文标题:vue文件底层逻辑怎么解析

          本文链接:https://www.haomeiwen.com/subject/badouftx.html