Repository navigation
Vite+ 1.6.0 caches vp run tasks that rewrite files they read, previews runs with vp run --dry-run and JSON output, lets vp check --continue-on-error report every failed check, and sets VP_USER_AGENT for the tools that vp starts.
Features
vp runcaches tasks that read files they also write, such astsdown --exportsrewritingpackage.jsonortsc --incrementalreading and writingtsconfig.tsbuildinfo. The files a task writes, and folders that hold only those files, may be missing on the next run, as on a fresh clone, and a cache hit restores them with the task's outputs, including the symbolic links the task created (docs) (vite-task#913, vite-task#914, vite-task#915, vite-task#916, vite-task#917, vite-task#918), by @wan9chi.vp run --dry-runshows each command that a run would start and whether it would hit the cache, without running anything or writing to the cache.vp run --jsonprints every package and task in the workspace, andvp run --dry-run --jsonprints the run plan with each step's cache status, as one JSON document for scripts, CI, and coding agents.vp run -vlists every change behind a cache miss, including each changed input file, and-vvalso lists the unchanged inputs and the outputs that a hit restores (docs) (vite-task#948, vite-task#960, vite-task#961, vite-task#963, vite-task#966, vite-task#967, vite-task#968, vite-task#969), by @wan9chi.vp check --continue-on-errorruns the remaining enabled checks after a failure, so one run reports formatting, lint, and type errors together, and exits with the status of the first failed check. Without the flag,vp checkstill stops at the first failed check (#3367), by @chbaefront.vp,vpr, andvpxsetVP_USER_AGENT=vp/<version>for their child processes, so tools can detect that Vite+ started them. When the global CLI delegates to a project's local CLI, the local version is reported (docs) (#1958), by @fengmk2.- First part of
VP_ENV_FORBIDDEN=1, for systems such as NixOS that provide Node.js and package managers themselves: with it set, Vite+ never downloads a Node.js or package-manager version, shims andvpxuse only the system tools onPATH, and installers andvp upgradeuse the systemnodeandpnpmfor Vite+'s own dependencies. In this release, commands that delegate to a package manager, such asvp installandvp run, fail withDisabledByEnvForbiddenwhile it is set. A follow-up change is planned to cover them and document the variable (#3233), by @myuron. - Upgrade the bundled Oxfmt and Oxlint (#3416), by @voidzero-guard[bot]:
oxfmt@0.76.0tooxfmt@0.78.0. Oxfmt formats Vue files with its own formatter instead of Prettier, so the output for Vue templates can change. It also fixes Tailwind class sorting in several layouts, Less escapes and%selectors, and TypeScript in Astro files.oxlint@1.91.0tooxlint@1.93.0andoxlint-tsgolint@7.0.2005tooxlint-tsgolint@7.0.2006.no-redeclaregets anignoreDeclarationMergeoption, andpromise/prefer-catchoffers a suggestion.- Oxlint and Oxfmt resolve an unset or relative
rootinvite.config.tsfrom the directory of the config file instead of the current directory, so editor integrations in multi-root workspaces load the correct project. - Vite+ installs its own dependencies during setup and
vp upgradewithpnpm@10.34.9(waspnpm@10.34.7). - The new Oxfmt and Oxlint can flag code that passed before. If your CI runs
vp check, runvp check --fix --continue-on-errorafter you upgrade: it formats files, applies the available lint fixes, formats again, and reports every error that remains. For example,unicorn/prefer-type-errornow also reports athrowin anifbranch without braces, and this command rewrites it.
Fixes & Enhancements
- While a Vite+ spinner is visible, such as
Installing global packagesinvp install -g, Vite+ hides the cursor and discards typed keys. Pressing Enter no longer leaves copies of the spinner row, and typed text no longer runs in the shell after the command ends. Ctrl+C during a spinner now ends the command with the usual signal status instead of exit code 0, and the global package spinners show the elapsed time (#3373, #3417), by @jong-kyung and @fengmk2. vp runloads a package'svite.config.*only when the run reaches one of that package's tasks. A run in one package no longer waits for the configs of other packages, a broken config in another package no longer fails it, andvp run <task>in a package that does not define the task reportsTask "<task>" not foundinstead of another package's config error (vite-task#944, vite-task#988), by @wan9chi.vp run nope#build, where no workspace package has the namenope, fails withPackage 'nope' not found in the workspaceand exits with code 1, instead of running nothing and exiting with code 0. A short name that matches several scoped packages fails as ambiguous (vite-task#984), by @wan9chi.- Folder listings no longer skip entries named
dist, so adistfolder that appears or disappears in a folder a task lists makes the next run a cache miss. Exclusions in a task'sinput, such as"!dist/**", now also apply to the folders that the task lists. In a new monorepo fromvp create, every task hits the cache from the thirdvp run ready, because the first build creates thedistfolders (vite-task#919, vite-task#941), by @wan9chi. - Fewer unnecessary cache misses and cache failures in
vp run: on Windows, files that a task deletes or moves are no longer among its inputs. Tasks that readnode_modules/.vite/task-cache, as Parcel and Gatsby do, hit the cache. A task that writes outside the workspace through.., likecp -r dist ../site, no longer fails withCache update failed(vite-task#937, vite-task#940, vite-task#980), by @wan9chi. - A cache hit restores the symbolic links that a task's
outputglobs match as links, instead of dropping them (vite-task#885), by @jasonkuhrt. - When several tasks become ready at the same time,
vp runchecks their cache entries in parallel, so cache hits start sooner (vite-task#982), by @wan9chi. - On macOS, task commands that use
shorbashbehave as on Linux: awhile readloop with a redirect underset -eno longer exits the script, anEXITtrap sees the exit status, so a failed task is no longer reported as successful, and$BASHis set (vite-task#939), by @lifeiscontent. - The helper files that
vp runwrites to the system temp directory go in one folder that only the current user can write to, such as/tmp/vp_run-1000on Linux. On Linux, a different Vite+ version run by another user no longer fails (vite-task#947, vite-task#974), by @wan9chi. - A
getEnvsquery from@voidzero-dev/vite-task-clientthat matches every name ({ prefix: '' }or*) returns nothing and no longer adds every environment variable to the cache key (vite-task#976), by @wan9chi. vp migrateno longer writes package specs that the package manager cannot resolve, such as a@vitest/*catalog:reference without a catalog entry or a top-level catalog on Bun before 1.2.21. Bun projects with an emptyworkspacesfield get catalog references, and child packages with a plainvite-plusrange get the same concrete version as the root when the project cannot use catalogs (#3397), by @jong-kyung.vp createuses the package manager version thatVP_PACKAGE_MANAGERselects for the generated settings, the installation, and its summary. Standalone pnpm projects getpackages: ['.']in an existingpnpm-workspace.yamlonly for pnpm before 10.5.0 (#3197), by @evan-lc and @fengmk2.vpsends aUser-Agentheader on all HTTP requests, so Node.js mirrors that reject requests without one, such asmirrors.aliyun.com, work (#3425), by @naokihaba.vp env pinprintsUpdatedwhen it overwrites an existing.node-versionor.nvmrcfile andCreatedwhen it writes a new one (#3377), by @CheHyeonYeong.
Docs
- Describe rebuildable inputs in the Automatic Data Tracking guide, and dry runs, JSON output, and
-vvin thevp runguide (#3419, #3421), by @wan9chi.
Chore
- Bump vite-task to
cb1ea8d, with its user-facing changes listed above, and list--dry-run,--json, and-vvinvp run --help(#3418), by @wan9chi. - The daily dependency upgrade also updates the pnpm version that the installers pin, after it checks the release integrity (#3407), by @fengmk2.
- Warm up the monorepo cache check in the
vp createCI job under pnpm and Bun (#3423), by @wan9chi. - Remove an unused CI job that the required
donecheck did not cover (#3403), by @jong-kyung. - Remove an incorrect comment about export pattern order in the CLI build script (#3405), by @alexicum.
Bundled Versions
| Tool | Version | Source | Changelog |
|---|---|---|---|
| vite | 8.3.7 |
5def936 |
unchanged |
| rolldown | 1.2.18 |
f9a49d6 |
unchanged |
| oxc-node | 1.0.1 |
7ff14c3 |
unchanged |
| tsdown | 0.23.4 |
npm | unchanged |
| vitest | 5.1.0 |
npm | unchanged |
| oxlint | 1.93.0 |
npm | 1.92.0, 1.93.0 |
| oxlint-tsgolint | 7.0.2006 |
npm | 7.0.2006 |
| oxfmt | 0.78.0 |
npm | 0.77.0, 0.78.0 |
Upgrade
vp upgradeIf vp upgrade must download Node.js and VP_NODE_DIST_MIRROR points to a mirror that rejects requests without a User-Agent header, such as mirrors.aliyun.com, unset it or point it to another mirror for this upgrade. The installed vp downloads Node.js and does not send the header yet.
New Contributors
@alexicum, @evan-lc, @CheHyeonYeong
Full Changelog: v1.5.1...v1.6.0
Published Packages
@voidzero-dev/vite-plus-core@1.6.0vite-plus@1.6.0create-vite-plus@1.6.0
Installation
macOS/Linux:
curl -fsSL https://vite.plus | bashHomebrew (macOS/Linux):
brew tap voidzero-dev/vite-plus https://github.com/voidzero-dev/vite-plus
brew install voidzero-dev/vite-plus/vpSee the Homebrew guide to switch from the script installer or the Homebrew Core vite-plus formula.
Windows:
irm https://vite.plus/ps1 | iexOr download and run vp-setup.exe from the assets below.
Docker:
docker run --rm -it -v "$PWD:/app" -w /app ghcr.io/voidzero-dev/vite-plus:1.6.0 vp buildRun any vp command without installing it; see the Docker guide for more.
Create a New App
Start a project without installing the global vp: create-vite-plus runs vp create through your package manager.
pnpm create vite-plus vite:application --directory my-app
cd my-app && pnpm exec vp devRun the command without arguments to pick a template interactively, and see the create guide for other package managers, templates, and options.