chore(deps): update vue to ^2.7.8
This MR contains the following updates:
Package | Type | Update | Change |
---|---|---|---|
vue | peerDependencies | minor | ^2.6.10 -> ^2.7.8 |
vue | devDependencies | minor | 2.6.11 -> 2.7.8 |
vue-template-compiler | devDependencies | minor | 2.6.11 -> 2.7.8 |
MR created with the help of gitlab-org/frontend/renovate-gitlab-bot
Release Notes
vuejs/vue
v2.7.8
Bug Fixes
- reactivity: fix shallowReactive nested ref setting edge cases (2af751b), closes #12688
-
sfc: align
<script setup>
component resolution edge case with v3 (#12687) (a695c5a), closes #12685 - types: avoid circular type inference between v2 and v3 instance types (fabc1cf), closes #12683
-
types: export
defineAsyncComponent
type (#12684) (ba7dd2c)
Features
-
setup: support listeners on setup context +
useListeners()
helper (adf3ac8)
v2.7.7
Bug Fixes
- codegen: script setup should not attempt to resolve native elements as component (e8d3a7d), closes #12674
- inject: fix edge case of provided with async-mutated getters (ea5d0f3), closes #12667
- setup: ensure setup context slots can be accessed immediately (67760f8), closes #12672
- types: vue.d.ts should use relative import to v3-component-public-instance (#12668) (46ec648), closes #12666
- watch: fix queueing multiple post watchers (25ffdb6), closes #12664
v2.7.6
Bug Fixes
- types: $refs can also contain ComponentPublicInstance (#12659) (fffbb9e)
- types: fix $children and $root instance types (52a5979), closes #12655
- types: fix missing expose() type on setup context (e0a9546), closes #12660
v2.7.5
Bug Fixes
- add missing export from
vue.runtime.mjs
(#12648) (08fb4a2) - detect property add/deletion on reactive objects from setup when used in templates (a6e7498)
- do not set currentInstance in beforeCreate (0825d30), closes #12636
- reactivity: fix watch behavior inconsistency + deep ref shallow check (98fb01c), closes #12643
- sfc: fix sfc name inference type check (04b4703), closes #12637
- types: support Vue interface augmentations in defineComponent (005e52d), closes #12642
- watch: fix deep watch for structures containing raw refs (1a2c3c2), closes #12652
v2.7.4
Bug Fixes
- build: fix mjs dual package hazard (012e10c), closes #12626
- compiler-sfc: use safer deindent default for compatibility with previous behavior (b70a258)
- pass element creation helper to static render fns for functional components (dc8a68e), closes #12625
- ssr/reactivity: fix array setting error at created in ssr [#12632] (#12633) (ca7daef)
- types: fix missing instance properties on defineComponent this (f8de4ca), closes #12628
- types: fix this.$slots type for defineComponent (d3add06)
- types: fix type inference when using components option (1d5a411)
- types: global component registration type compat w/ defineComponent (26ff4bc), closes #12622
- watch: fix watchers triggered in mounted hook (8904ca7), closes #12624
Features
- defineAsyncComponent (9d12106), closes #12608
- support functional components in defineComponent (559600f), closes #12619
v2.7.3
Bug Fixes
- add renderTracked/Triggered merge strategy (#12616) (6d1dbee)
- ssr/reactivity: fix composition api behavior in SSR (360272b), closes #12615
- types: allow slot attribute (94ccca2), closes #12617
v2.7.2
Bug Fixes
Features
- allow passing directive definition directly to h() (#12590) (d45bbea)
- types: define component improvements (#12612) (fb93c1b)
v2.7.1
Bug Fixes
- compiler-sfc: fix template usage check edge case for v-on statements (caceece), closes #12591
- export proxyRefs (e452e9d), closes #12600
- fix NaN comparison on state change (ff5acb1), closes #12595
- reactivity: shallowReactive should not unwrap refs (#12605) (15b9b9b), closes #12597
v2.7.0
Backported Features
- Composition API
- SFC
<script setup>
- SFC CSS v-bind
In addition, the following APIs are also supported:
-
defineComponent()
with improved type inference (compared toVue.extend
) -
h()
,useSlot()
,useAttrs()
,useCssModules()
-
set()
,del()
andnextTick()
are also provided as named exports in ESM builds. -
The
emits
option is also supported, but only for type-checking purposes (does not affect runtime behavior)2.7 also supports using ESNext syntax in template expressions. When using a build system, the compiled template render function will go through the same loaders / plugins configured for normal JavaScript. This means if you have configured Babel for
.js
files, it will also apply to the expressions in your SFC templates.
Notes on API exposure
-
In ESM builds, these APIs are provided as named exports (and named exports only):
import Vue, { ref } from 'vue' Vue.ref // undefined, use named export instead
-
In UMD and CJS builds, these APIs are exposed as properties on the global
Vue
object. -
When bundling with CJS builds externalized, bundlers should be able to handle ESM interop when externalizing CJS builds.
Behavior Differences from Vue 3
The Composition API is backported using Vue 2's getter/setter-based reactivity system to ensure browser compatibility. This means there are some important behavior differences from Vue 3's proxy-based system:
-
All Vue 2 change detection caveats still apply.
-
reactive()
,ref()
, andshallowReactive()
will directly convert original objects instead of creating proxies. This means:// true in 2.7, false in 3.x reactive(foo) === foo
-
readonly()
does create a separate object, but it won't track newly added properties and does not work on arrays. -
Avoid using arrays as root values in
reactive()
because without property access the array's mutation won't be tracked (this will result in a warning). -
Reactivity APIs ignore properties with symbol keys.
In addition, the following features are explicitly NOT ported:
-
❌ createApp()
(Vue 2 doesn't have isolated app scope) -
❌ Top-levelawait
in<script setup>
(Vue 2 does not support async component initialization) -
❌ TypeScript syntax in template expressions (incompatible w/ Vue 2 parser) -
❌ Reactivity transform (still experimental) -
❌ expose
option is not supported for options components (butdefineExpose()
is supported in<script setup>
).
TypeScript Changes
-
defineComponent
provides improved type inference similar to that of Vue 3. Note the type ofthis
insidedefineComponent()
is not interoperable withthis
fromVue.extend()
. -
Similar to Vue 3, TSX support is now built-in. If your project previously had manual JSX type shims, make sure to remove them.
Upgrade Guide
Vue CLI / webpack
-
Upgrade local
@vue/cli-xxx
dependencies the latest version in your major version range (if applicable):-
~4.5.18
for v4 -
~5.0.6
for v5
-
-
Upgrade
vue
to^2.7.0
. You can also removevue-template-compiler
from the dependencies - it is no longer needed in 2.7.Note: if you are using
@vue/test-utils
, you may need to keep it in the dependencies for now, but this requirement will also be lifted in a new release of test utils. -
Check your package manager lockfile to ensure the following dependencies meet the version requirements. They may be transitive dependencies not listed in
package.json
.-
vue-loader
:^15.10.0
-
vue-demi
:^0.13.1
If not, you will need to remove
node_modules
and the lockfile and perform a fresh install to ensure they are bumped to the latest version. -
-
If you were previously using
@vue/composition-api
, update imports from it tovue
instead. Note that some APIs exported by the plugin, e.g.createApp
, are not ported in 2.7. -
Update
eslint-plugin-vue
to latest version (9+) if you run into unused variable lint errors when using<script setup>
. -
The SFC compiler for 2.7 now uses PostCSS 8 (upgraded from 7). PostCSS 8 should be backwards compatible with most plugins, but the upgrade may cause issues if you were previously using a custom PostCSS plugin that can only work with PostCSS 7. In such cases, you will need to upgrade the relevant plugins to their PostCSS 8 compatible versions.
Vite
2.7 support for Vite is provided via a new plugin: @vitejs/plugin-vue2. This new plugin requires Vue 2.7 or above and supersedes the existing vite-plugin-vue2.
Note that the new plugin does not handle Vue-specific JSX / TSX transform, which is intentional. Vue 2 JSX / TSX transform should be handled in a separate, dedicated plugin, which will be provided soon.
Volar Compatibility
2.7 ships improved type definitions so it is no longer necessary to install @vue/runtime-dom
just for Volar template type inference support. All you need now is the following config in tsconfig.json
:
{
// ...
"vueCompilerOptions": {
"target": 2.7
}
}
Devtools Support
Vue Devtools 6.2.0 has added support for inspecting 2.7 Composition API state, but the extensions may still need a few days to go through review on respective publishing platforms.
Bug Fixes
- sfc: only include legacy decorator parser plugin when new plugin is not used (326d24a)
v2.6.14
Bug Fixes
- types: async Component types (#11906) (c52427b)
- v-slot: fix scoped slot normalization combined with v-if (#12104) (38f71de)
Features
v2.6.13
Bug Fixes
- attrs: do not consider translate attribute as boolean (#11392) (cd57393), closes #11391
- compiler: Allow BigInt usage in templates (#11152) (c42b706)
- compiler: avoid converting &nbps; to spaces (#11065) (55a30cf)
- compiler: event handlers with modifiers swallowing arguments (fix #10867) (#10958) (8620706)
- core: fix sameVnode for async component (#11107) (5260830)
- core: remove trailing comma in function signature (#10845) (579e1ff), closes #10843
- errorHandler: async error handling for watchers (#9484) (e4dea59)
- force update between two components with and without slot (#11795) (77b5330)
- give correct namespace in foreignObject (#11576) (af5e05d), closes #11575
- handle async placeholders in normalizeScopedSlot (#11963) (af54514)
- keep-alive: cache what is really needed not the whole VNode data (#12015) (e7baaa1)
- parser: allow multiple slots with new syntax (#9785) (67825c2), closes #9781
- pause dep collection during immediate watcher invocation (#11943) (987f322)
- props: correctly warn when a provided prop is Symbol (#10529) (abb5ef3), closes #10519
- props: support BigInt in props type validation (#11191) (fa1f81e)
- slot: add a function to return the slot fallback content (#12014) (ce457f9)
- ssr: avoid missing files in manifest (#11609) (b97606c)
- ssr: inheritAttrs false adds attributes to html (#11706) (7e5dc6b)
- ssr: textarea keeps undefined/null values (#11121) (b8bd149)
- types: add types for Vue.util.warn function (#11964) (e0274e4), closes /github.com/vuejs/vue/blob/v2.6.12/src/core/util/debug.js#L18-L26
- types: allow string for watch handlers in options (#10396) (668e1e6)
- types: allow symbol & boolean for vnode key (#11914) (5c459f0)
- types: changed expression type to optional string (#11189) (7c75462), closes #10871
- types: make $refs undefined possible (#11112) (2b93e86)
- v-on: avoid events with empty keyCode (autocomplete) (#11326) (c6d7a6f)
- v-pre: do not alter attributes (#10088) (0664cb0), closes #10087
- vdom: avoid executing root level script tags (#11487) (fb16d7b), closes #11483
- warn: better message with no constructors props (#9241) (6940131)
-
warns: modify
maybeComponent
function in parser (#10167) (0603ff6), closes #10152
Features
- warns: avoid warning native modifiers on dynamic components (#11052) (3d46692)
- warn: warn computed conflict with methods (#10119) (3ad60fe)
Performance Improvements
v2.6.12
Bug Fixes
Configuration
-
If you want to rebase/retry this MR, click this checkbox.
This MR has been generated by Renovate Bot.