mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-30 04:52:04 -04:00
* feat: add virtualStoreOnly option to skip post-import linking Adds a new `virtualStoreOnly` config option that populates the virtual store (standard or GVS) without creating importer symlinks, hoisting, bin links, or running lifecycle scripts. - Config: add virtual-store-only to types, Config interface, defaults - extendInstallOptions: validate against enableModulesDir=false, force ignoreScripts=true and empty hoist patterns when enabled - headless: add skipPostImportLinking flag guarding 7 post-import steps - core install: guard buildModules, bin linking, and lifecycle hooks - link.ts: skip hoisting and symlink creation - fetch command: use virtualStoreOnly internally - CLI: wire through rcOptionsTypes and installDeps Pick type Closes #10840 * fix: address virtualStoreOnly review comments - Remove ignoreScripts=true forcing (allow builds with virtualStoreOnly) - Allow virtualStoreOnly + enableModulesDir=false when GVS is enabled - Guard linkHoistedModules with skipPostImportLinking in hoisted branch - Un-guard buildModules so lifecycle scripts can run with virtualStoreOnly - Split metadata block so writeModulesManifest persists with virtualStoreOnly - Add enableModulesDir=true to pnpm fetch to avoid config conflict - Fix test bugs: dep version 100.0.0→100.1.0, globalVirtualStoreDir→virtualStoreDir - Add test for virtualStoreOnly + enableModulesDir=false + GVS - Relax headless import guard to allow GVS with enableModulesDir=false * fix: pin dep-of-pkg-with-1-dep dist-tag in virtualStoreOnly tests The tests hardcode dep-of-pkg-with-1-dep@100.1.0 in path assertions but didn't call addDistTag to pin the latest version. Since test files run concurrently, other tests can change the dist-tag to 100.0.0, causing resolution to pick a different version and the path check to fail. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Zoltan Kochan <z@kochan.io> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>