Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ name = "create_from_nonworkspace_subdir"
vp = "global"
skip-platforms = ["windows"]
steps = [
{ argv = ["vp", "create", "--no-interactive", "vite:application"], cwd = "scripts", comment = "from non-monorepo subdir", snapshot = false, continue-on-failure = true },
{ argv = ["vp", "create", "--no-interactive", "--package-manager", "pnpm", "vite:application"], cwd = "scripts", comment = "explicit package manager overrides the non-workspace ancestor", snapshot = false, continue-on-failure = true },
{ argv = ["vpt", "stat-file", "scripts/vite-plus-application/package.json", "--assert", "file"], comment = "created at scripts/vite-plus-application", continue-on-failure = true },
{ argv = ["vpt", "grep-file", "scripts/vite-plus-application/package.json", "\"name\": \"pnpm\""], comment = "pins pnpm in devEngines", continue-on-failure = true },
{ argv = ["vpt", "stat-file", "vite-plus-application/package.json", "--assert-not", "file"], comment = "not created at parent root", continue-on-failure = true },
]
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# create_from_nonworkspace_subdir

## `cd scripts && vp create --no-interactive vite:application`
## `cd scripts && vp create --no-interactive --package-manager pnpm vite:application`

from non-monorepo subdir
explicit package manager overrides the non-workspace ancestor


## `vpt stat-file scripts/vite-plus-application/package.json --assert file`
Expand All @@ -13,6 +13,14 @@ created at scripts/vite-plus-application
scripts/vite-plus-application/package.json: file
```

## `vpt grep-file scripts/vite-plus-application/package.json '"name": "pnpm"'`

pins pnpm in devEngines

```
scripts/vite-plus-application/package.json: found "\"name\": \"pnpm\""
```

## `vpt stat-file vite-plus-application/package.json --assert-not file`

not created at parent root
Expand Down
15 changes: 11 additions & 4 deletions packages/cli/src/create/bin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -826,7 +826,7 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h
}
}

// Resolve package manager: workspace detection > CLI flag > interactive prompt/default
// Resolve package manager: existing monorepo > CLI flag > ambient detection > prompt/default
if (
options.packageManager &&
!Object.values(PackageManager).includes(options.packageManager as PackageManager)
Expand All @@ -837,16 +837,23 @@ Use \`vp create --list\` to list all available templates, or run \`vp create --h
);
cancelAndExit('Invalid --package-manager value', 1);
}
const requestedPackageManager = options.packageManager as PackageManager | undefined;
const detectedPackageManager = workspaceInfoOptional.packageManager;
const packageManager =
workspaceInfoOptional.packageManager ??
(options.packageManager as PackageManager | undefined) ??
(isMonorepo
? (detectedPackageManager ?? requestedPackageManager)
: (requestedPackageManager ?? detectedPackageManager)) ??
(await selectPackageManager(options.interactive, compactOutput));
const packageManagerVersion =
packageManager === detectedPackageManager
? workspaceInfoOptional.packageManagerVersion
: 'latest';
const shouldSilencePackageManagerInstallLog =
compactOutput || (isMonorepo && workspaceInfoOptional.packageManager !== undefined);
// ensure the package manager is installed by vite-plus
const downloadResult = await downloadPackageManager(
packageManager,
workspaceInfoOptional.packageManagerVersion,
packageManagerVersion,
options.interactive,
shouldSilencePackageManagerInstallLog,
);
Expand Down
7 changes: 4 additions & 3 deletions rfcs/package-manager-detection.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,12 @@ vp create vite:monorepo --no-interactive --package-manager bun

**Resolution priority for `vp create`**:

1. Detected workspace package manager (`packageManager` field or `devEngines.packageManager`; existing monorepo takes precedence)
1. Any package manager detected for an existing monorepo (from manifest fields, workspace files, lockfiles, or package-manager configuration)
2. `--package-manager` CLI flag
3. Interactive prompt / auto-default (pnpm)
3. Package manager detected from a non-monorepo ancestor
4. Interactive prompt / auto-default (pnpm)

This ensures monorepo consistency: if you run `vp create` inside an existing workspace that already has a `packageManager` field, the workspace setting wins over the CLI flag.
This ensures monorepo consistency while allowing standalone projects to override ambient detection explicitly.

## Auto-Update Behavior

Expand Down
Loading