RepoJournal

$ cat vuejs/week/2026-09-21.log

Vue.js

Vue.js

the week in review · Sep 21 – Sep 27, 2026

language-tools 翻越 vueCompilerOptions.plugins 不再合并

By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology

♥

The change follows how `extends` already treats other array options, so inherited plugin lists replace rather than accumulate.

21 commits 16 PRs merged 1 releases 7 briefings covered

all vuejs reviews →

fix(language-core): override vueCompilerOptions.plugins instead of merging vuejs/language-tools

by johnsoncodehk

Configs that never declare `plugins` are unaffected, and an empty array clears anything inherited. In a shared base config, the plugin you relied on is now gone unless you re-declare it yourself.

fix(language-core): deduplicate vueCompilerOptions.plugins on resolve vuejs/language-tools

by camonunez

The same plugin module could previously be registered more than once when tsconfigs form an `extends` chain, which the writeup says is common in Nuxt monorepos with shared layers. Plugin entries are now deduplicated when the config resolves.

fix(language-core): keep union props when using withDefaults (#6180) vuejs/language-tools

by xia-chao

`withDefaults(defineProps<A | B>())` no longer collapses to `DefineSetupFnComponent<Record<string, any>>`; the report says a homomorphic `[K in keyof T]` mapped type distributed `__VLS_TypePropsToOption` across the union.

fix(client): forward slots to client components vuejs/vitepress

by lllleolin-max

`defineClientComponent` discarded slots from its parent, so a client-only component used in Markdown rendered its fallback content even after loading. Slots are now forwarded when `args` is omitted, empty, or contains only props.

fix(no-ref-object-reactivity-loss): improve IIFE handling vuejs/eslint-plugin-vue

by ValentinYoushkevich

Reading from a ref inside an immediately invoked function expression loses reactivity the same way a direct read does, and the rule now reports it. Code that calls an IIFE synchronously in the enclosing scope will start flagging.

fix(require-default-prop): don't report on `defineModel` vuejs/eslint-plugin-vue

by seanogdev

The `require-default-prop` half of #3032 is reverted: a `defineModel` without a default has no valid fix, since Vue's types reject `default: undefined` and a real default de-syncs parent and child. `require-valid-default-prop` still checks `defineModel`.

fix(no-unused-properties): ignore props typed as `never` vuejs/eslint-plugin-vue

by ValentinYoushkevich

A prop typed `never` exists to forbid its usage, so reporting it as unused was noise. The rule now ignores those props.

fix(runtime): prevent HMR registration outside Vue vuejs/vue-jsx-vapor

by zhiyuanzmj

The runtime no longer registers HMR handlers when it is not running under Vue, addressing the linked issue. Alongside: KeepAlive now propagates the component root in the vapor compiler, and the Volar macro dropped its `defineComponent` alias.

$ ls vuejs/week/ # the briefings behind this review

Keep up with Vue.js in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

or

fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.

Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.

all vuejs reviews →