A screenshot comparison fails on a one-pixel difference, and font rendering differs between a laptop and a CI runner. Running the browser in a pinned container is the…
Promise.race settles on the first result including a rejection, and Promise.any waits for the first success. race is right for a timeout, where a rejection genuinely should win,…
There is no process in a browser, so Vite exposes environment variables on import.meta.env and only the ones with a prefix. The prefix requirement is a security default…
Vite uses esbuild in development and Rollup for the production build, which means the plugin ecosystem to look in is Rollup’s. The two-engine arrangement is the source of…
A 38-second dev server start on a machine with nothing else to do. Native ESM changes the feedback loop, and running two build tools has a specific cost.
A bundler in development builds the whole graph before serving anything, and a native ESM server builds nothing until the browser asks for a specific file. The start…
A fetch started in an effect keeps running after unmount, and its then sets state on a component that no longer exists. The abort rejects the promise with…
React may discard memoised values to free memory, so useMemo is a performance optimisation and never a correctness mechanism. The documentation is explicit that a future version may…