- Vue – Building and Deploying to Production
The last mile. What `vite build` produces and how to read the output, environment variables with `import.meta.env` and the `VITE_` prefix that decides what gets baked into a public bundle, the history-mode rewrite rule every static host needs or your routes 404 on refresh, cache headers for hashed assets, and a GitHub Actions workflow that ships it.
- Vue – Testing with Vitest and Vue Test Utils
Tests you will keep running. Vitest and why a Vite project gets it almost for free, mounting a component with Vue Test Utils, asserting on rendered output rather than internals, testing props and emitted events, `flushPromises` for anything async, testing a Pinia store on its own, and where an end-to-end Playwright test earns its much higher cost.
- Vue – Performance
Making it fast, and knowing whether it was slow. Where re-renders actually come from, `v-once` and `v-memo`, `shallowRef` for a large object you replace rather than edit, why an IntersectionObserver beats a scroll listener, cursor pagination instead of offset, keeping heavy work out of computeds, and reading a flame chart in Vue DevTools before changing anything.
- Vue – Async Components, Suspense and KeepAlive
Not shipping everything on the first load. `defineAsyncComponent` with loading and error components, route-level code splitting and what Vite actually emits, `<Suspense>` and its still-experimental status, and `<KeepAlive>` for the tab or list that should not throw away its state and refetch every time you navigate back to it.
- Vue – Transitions and Teleport
Two small features that solve disproportionately annoying problems. `<Transition>` and the six CSS classes it toggles, `<TransitionGroup>` for a list that gains and loses items — the toast stack — and `<Teleport>`, which renders a modal at the end of `<body>` so it stops being clipped by whatever `overflow` and `z-index` its parent happened to set.