vue3的mini仓库,用于学习理解vue3
MIT License
vue3minivue3
testsexampleTDD,
# npm test
# yarn test
#
pnpm test
#
pnpm test []
vscode
+---------------------+
| |
| @vue/compiler-sfc |
| |
+-----+--------+------+
| |
v v
+---------------------+ +----------------------+
| | | |
+------------>| @vue/compiler-dom +--->| @vue/compiler-core |
| | | | |
+----+----+ +---------------------+ +----------------------+
| |
| vue |
| |
+----+----+ +---------------------+ +----------------------+ +-------------------+
| | | | | | |
+------------>| @vue/runtime-dom +--->| @vue/runtime-core +--->| @vue/reactivity |
| | | | | |
+---------------------+ +----------------------+ +-------------------+
reactivity
=> runtime-core
=> runtime-dom
=> compiler-core
api
api | |
---|---|
reactive | proxy, getset |
ref | valueget/setvaluereactive |
effect | |
computed | effect,valueget |
readonly | proxy, set |
shallowReadonly | readonly |
runtime-core
vuejsdom,runtime-dom
h(createVNode)
dompatch
,mount
dom
domdiff
Q: vueupdate
Q: diff
Q: setuprender
Q: nextick
Q: emit
Q: renderSlots?
Q: provide, inject?key
Q: $el,$slots,$props?
Q: templaterender(runtime-core``compile-core
)
dom
//
createElement,
//
patchProps,
//
insert,
//
remove,
//
setElementText
template TO code
parse``ast``ast
transform
// <div>hi,{{message}}</div>
exports[`codegen element 1`] = `
"const { toDisplayString:_toDisplayString, createElementVNode:_createElementVNode } = Vue
return function render(_ctx, _cache){return _createElementVNode('div', null, 'hi,' + _toDisplayString(_ctx.message))}"
`;
: `parse` `transform` `codegen`
`parse`
ast: {{}}, <div></div>
`transform`
transformast`codegen`
`codegen`