跪拜 Guibai
← All articles
Frontend · JavaScript · CSS

Rspack 2.2 Lands 30+ Speed Boosts, pnpm 12 Goes Rust-Stable, and Solid 2.0 RC Bakes Async into Reactivity

By 晓得迷路了 ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

pnpm 12’s Rust core is now the default path forward, but the upgrade isn’t automatic — teams relying on `npm install -g pnpm` will stay on v11 unless they explicitly opt in. Solid 2.0 RC freezes its API, so early adopters can start porting without fear of further churn.

Summary

Rspack 2.2 delivers shorter build times, improved HMR, and shorter module IDs alongside `import.meta` enhancements and Browserslist Baseline support. pnpm 12 marks the Rust rewrite as stable, carrying over v11 commands and lockfile format with minimal breakage — but npm’s latest tag still points to v11, so the upgrade requires an explicit `pnpm self‑update next‑12`.

Solid 2.0 RC removes `createResource`, `batch`, and `startTransition` entirely. Async data now flows through ordinary memos inside the reactive dependency graph, and SolidStart’s capabilities are folded into a Vite plugin behind a `start: true` flag. Node.js 26.8.0 adds native ZIP read/write and basic REPL syntax highlighting.

On the CSS side, six 2026-era features — already broadly supported — can replace chunks of JavaScript, though many developers still overlook them. A Chrome extension called Mobile View tests up to five device viewports simultaneously with scroll sync and theme toggling, while SVGO 4.1 and nuqs 2.10 round out the tooling updates.

Takeaways
Rspack 2.2 includes over 30 performance optimizations: faster builds, better HMR, and shorter module IDs.
pnpm 12 stabilizes the Rust rewrite; npm’s latest tag still points to v11, so upgrading requires `pnpm self‑update next‑12`.
Solid 2.0 RC removes `createResource`, `batch`, and `startTransition` and bakes async directly into the reactive graph via ordinary memos.
SolidStart is retired; its capabilities are now activated through a Vite plugin with `start: true`, and the API is frozen.
Node.js 26.8.0 can read and write ZIP archives natively, and the REPL now supports basic syntax highlighting.
ESM `import` binds to the exporter’s live variable reference, while a destructured `require()` gets only a copy — a difference that bites in circular dependencies and published packages.
Six CSS features that reached full browser support in 2026 can replace significant JavaScript, but remain underused.
Mobile View tests up to five device viewports at once with scroll sync and theme switching.
nuqs 2.10 manages URL query-string state with a `useState`-like, type-safe API.
Conclusions

Solid 2.0’s removal of `createResource` and `startTransition` signals a design bet that async should not be a special case — it should just be another edge in the dependency graph, tracked like any other value. That simplifies the mental model but also shifts complexity onto the runtime’s scheduler.

The ESM-vs-CommonJS binding difference is not academic: a destructured `require()` in a hot-reload or circular-dependency scenario will hold a stale copy while an `import` sees the latest value. Library authors shipping dual-format packages need to be aware that consumers may observe different behavior depending on which module system resolves.

pnpm keeping npm’s `latest` tag on v11 while releasing a stable Rust-based v12 is a cautious rollout pattern that avoids surprising CI pipelines, but it also means many teams will unknowingly stay on the older runtime for weeks or months.

Concepts & terms
Browserslist Baseline
A way to define target browser support levels (e.g., ‘widely available’) so that tools like Rspack can automatically downlevel or polyfill only for the specified baseline, rather than manually curating a browserslist query.
Solid’s reactive dependency graph with async
In Solid 2.0, async values (promises, streams) are tracked as nodes in the same fine-grained reactivity graph that synchronous signals and memos use. A memo that reads an async value suspends until resolution, then re-runs when the value updates — no separate resource primitive needed.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗