不得不吐槽一句,vue的源码竟然是用ts语言写的。可怜我等小前端看的迷迷糊糊的,要不是有一点python的基础,很多东西真的是完全看不懂哎。最后才想起可以把ts编译成js文件
vue的compiler模块
直接找到compiler
模块下的入口index.js
文件,根据它的代码,我们能猜出几个有用的信息(猜的,一步步来,错了再回来改)12345678910exports.createCompiler = create_compiler_1.createCompilerCreator(function baseCompile(template, options) { var ast = index_1.parse(template.trim(), options); optimizer_1.optimize(ast, options); var code = index_2.generate(ast, options); return { ast: ast, render: code.render, staticRenderFns: code.staticRenderFns };});
- 通过
parse
方法,可以得到一颗AST树 - 猜测
render
方法,应该是个渲染函数,将我们得到的AST树渲染成html staticRenderFns
好像是一个数据渲染函数集合(因为最后有个s)
前端传统的AST,即抽象语法树,是把我们的js代码进行编译给浏览器理解。现在比如babel的编译,jsx语法的编译其实模仿的都是这种思想。
vue的shared模块
这个模块没有什么内容,一个utils文件主要给其他模块提供各种各样的配置函数
vue的core模块
observer
数据监听模块,我们的双向绑定就是其中之一
###