Mend Renovate
This PR contains the following updates:
Release Notes
vuejs/vue
Compare Source
Bug Fixes
Compare Source
Bug Fixes
- compiler-sfc: allow full hostnames in asset url base (#12732) (5c742eb), closes #12731
- compiler-sfc: rewriteDefault for class with decorators (#12747) (5221d4d)
- directives shorthand normalize error (#12744) (2263948), closes #12743
- ensure render watcher of manually created instance is correctly tracked in owner scope (bd89ce5), closes #12701
- fix effect scope tracking for manually created instances (7161176), closes #12705
- ssr: fix on-component directives rendering (#12661) (165a14a), closes #10733
- types: allow attaching unknown options to defined component (b4bf4c5), closes #12742
- types: fix missing error for accessing undefined instance properties (8521f9d), closes #12718
- types: fix options suggestions when using defineComponent (4b37b56), closes #12736
- types: Make SetupBindings optional on ExtendedVue and CombinedVueInstance (#12727) (00458cd), closes #12726 #12717
- watch: avoid pre watcher firing on unmount (f0057b1), closes #12703
Features
Compare Source
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)
Compare Source
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
Compare Source
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
Compare Source
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
Compare Source
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
Compare Source
Bug Fixes
Compare Source
Bug Fixes
- compiler-sfc: preserve old deindent behavior for pug (1294385), closes #12611
Features
Compare Source
Bug Fixes
Compare Source
Backported Features
In addition, the following APIs are also supported:
-
defineComponent()
with improved type inference (compared to Vue.extend
)
-
h()
, useSlot()
, useAttrs()
, useCssModules()
-
set()
, del()
and nextTick()
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()
, and shallowReactive()
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-level
await
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 (but defineExpose()
is supported in <script setup>
).
TypeScript Changes
-
defineComponent
provides improved type inference similar to that of Vue 3. Note the type of this
inside defineComponent()
is not interoperable with this
from Vue.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 remove vue-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 to vue
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)
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.
Uh oh!
There was an error while loading. Please reload this page.
Mend Renovate
This PR contains the following updates:
^2.6.12
->2.7.10
Release Notes
vuejs/vue
v2.7.10
Compare Source
Bug Fixes
v2.7.9
Compare Source
Bug Fixes
Features
v2.7.8
Compare Source
Bug Fixes
<script setup>
component resolution edge case with v3 (#12687) (a695c5a), closes #12685defineAsyncComponent
type (#12684) (ba7dd2c)Features
useListeners()
helper (adf3ac8)v2.7.7
Compare Source
Bug Fixes
v2.7.6
Compare Source
Bug Fixes
v2.7.5
Compare Source
Bug Fixes
vue.runtime.mjs
(#12648) (08fb4a2)v2.7.4
Compare Source
Bug Fixes
Features
v2.7.3
Compare Source
Bug Fixes
v2.7.2
Compare Source
Bug Fixes
Features
v2.7.1
Compare Source
Bug Fixes
v2.7.0
Compare Source
Backported Features
<script setup>
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):
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: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)await
in<script setup>
(Vue 2 does not support async component initialization)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 v5Upgrade
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 intsconfig.json
: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
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.