Nuxt 4 and VitePress now run out of the box, and nub selects .env files from APP_ENV rather than NODE_ENV.
[!IMPORTANT]
NODE_ENVno longer selects.envfiles. nub treatsNODE_ENVas the application's own dev/prod variable — it never sets it, never reads it to pick env files, and won't let a.envfile change it. If an ambientNODE_ENV=<mode>was selecting.env.{mode}files, setAPP_ENV=<mode>instead.
Framework support
Two more frameworks scaffold and run with no config change:
- Nuxt 4 installs and runs under the global virtual store —
nuxt prepareandnuxt devresolve@vue/compiler-sfc, whichvue-router's/viteentry imports statically while declaring it an optional peer. Nub now hoists such present, range-satisfying optional peers into ejected closure members, matching pnpm. (#350) - VitePress can read linked files from the store: nub appends the store directory to Vite's
server.fs.allowinstead of skipping it when the list is already set. (#346)
Env-file mode
.env.{mode} selection is driven by APP_ENV. With it unset, only .env.local and .env load. This decouples the file selector from NODE_ENV — the same move Vite, varlock, dotenvx, Node, and Deno made, so a non-standard NODE_ENV can no longer silently flip a framework into development. The mode value is restricted to [A-Za-z0-9_.-], and --env-file (repeatable) still loads specific files explicitly. (#351)
Install
nub install --lockfile-only now updates the lockfile in CI. --lockfile-only is exempt from the CI auto-frozen-lockfile default, so it no longer fails as frozen when run in a CI environment. (#349)
The full release notes list every change in this release.