Migration Build: a build of Vue 3 that provides Vue 2 compatible behavior. The Migration Build is intended to help migrating existing Vue 2 apps to Vue 3.
only trigger $attrs update when it has actually changed (5566d39)
compiler: skip unncessary checks when parsing end tag (048ac29)
avoid deopt for props/emits normalization when global mixins are used (51d2be2)
Deprecations
app.config.isCustomElement has been deprecated and should be now nested under app.config.compilerOptions. [Docs]
delimiters component option has been deprecated and should now be nested under the compilerOptions component option. [Docs]
v-is has been deprecated in favor of is="vue:xxx" [Docs]
Minor Breaking Changes
this.$props and the props object passed to setup() now always contain all the keys for declared props, even for props that are absent (4fe4de0). This has always been the behavior in Vue 2 and is therefore considered a fix (see reasoning in #3288). However, this could break Vue 3 code that relied on the keys for prop absence checks. The workaround is to use a Symbol default value for props that need absence checks:
constisAbsent=Symbol()exportdefault{props: {foo: {default: isAbsent}},setup(props){if(props.foo===isAbsent){// foo is absent}}}
optionMergeStrategies functions no longer receive
the component instance as the 3rd argument. The argument was technically
internal in Vue 2 and only used for generating warnings, and should not
be needed in userland code. This removal enables much more efficient
caching of option merging.
Bug Fixes
compat: revert private properties on $options in comapt mode (ad844cf), closes #3883
runtime-core: fix fragment update inside de-opt slots (5bce2ae), closes #3881
compat: fix deep data merge with extended constructor (c7efb96), closes #3852
compiler-sfc: fix style injection when using normal script + setup (8b94464), closes #3688
compiler-sfc: fix template expression assignment codegen for script setup let refs (#3626) (2c7bd42), closes #3625