之前我们分析@vue/compiler-sfc
处理template
的时候发现核心是调用@vue/compiler-dom
[1]这个包来处理的,所以我们就接下来就来分析这个包。
坏蛋Dan:vue/compiler-sfc源码分析学习--汇总
我们先回到@vue/compiler-sfc/src/compileTemplate.ts
文件中
也就是说入口是compile
这个方法。
在开始分析compile
方法之前,这里有个问题需要分析,那就是@vue/compiler-sfc
这个包中的parse.ts
中我们也有用到@vue/compiler-dom
这个包,但是我们是用的parse
方法,在这里有什么作用呢?
其实是把整个sfc
文件转换成了ast
(只有template
里全转了,script、style、custom
这些都只是处理了外层也就是<script>
这些副作用标签,当然你让它转它也转不了啊,专业不对口) 。
这里会把template
标签(并非所有情况)、script、style
这些标签标记为RAWTEXT
,也就是原始文本,这些tag
是会被忽略掉的。
所以其实这里的template
的ast
并没有被使用,而后compileTemplate
还是基于source
也就是源码来转换的。
没想到吧。。。最核心的把template
转换为ast
的代码不在这,在@vue/compiler-core
[2]里的baseCompile
方法。
但有些东西还是放到了这个包中,比如v-on、v-html
等指令的处理、特殊标签比如transition
以及静态节点提升都在这个包中,所以还是有学习的必要的。
所以我们准备分三部分来分析
node transform
。directive transform
。hoist
节点。差点把这个忘了,由于这里只有一个简陋的测试单元。
所以我们还是把之前的那个team.vue
引进来吧,毕竟花花绿绿有代码提示写起来才舒服。
在packages/compiler-dom/__tests__/index.spec.ts
文件中
我这直接使用parse
出来的content
字符串传入。
这样就ok
啦。
噢,别忘了带上options
,毕竟有些东西是在@vue/compiler-sfc
里面的。
这样就未免太麻烦了!!!!!
实际上我们完全没有必要重写一个测试单元,我们可以直接使用compileTemplate.spec.ts
里的!
是的,你应该猜到如何操作了。
让我们回到@vue/compiler-sfc
包的compileTemplate.ts
文件中
这样就可以啦~
试了下,也是可以直接进入到@vue/compiler-dom
这个包中的,多包管理(monorepo
)真得劲~
可能目前的分析会有些问题,如果后面发现问题会回来补充
补充的点1:这个包中只包含部分指令
补充的点2:原本是起名静态节点提升的,但是compiler-dom
这个包中仅是将节点stringify
并替换原来的hoist
节点而已,所以改成字符串化hoist
节点。
编辑于 2022-12-27 12:36・IP 属地广东