From dbd3c8f3ae187e111bbf16d535ae374c65da66bc Mon Sep 17 00:00:00 2001 From: "Mr. Robot" Date: Mon, 5 Oct 2026 22:28:14 +0600 Subject: [PATCH 1/3] feat: add upm package manager support --- docs/add.md | 18 +++++----- docs/init.md | 36 +++++++++---------- docs/module.md | 18 +++++----- packages/create-nuxt/package.json | 2 +- packages/nuxt-cli/package.json | 2 +- packages/nuxt-cli/test/unit/help.spec.ts | 24 ++++++------- .../test/unit/utils/package-managers.spec.ts | 11 ++++++ pnpm-lock.yaml | 13 ++++--- pnpm-workspace.yaml | 1 + 9 files changed, 71 insertions(+), 54 deletions(-) diff --git a/docs/add.md b/docs/add.md index a000f3280..2f242c1e8 100644 --- a/docs/add.md +++ b/docs/add.md @@ -10,7 +10,7 @@ links: ```bash [Terminal] -npx nuxt add [--cwd=] [--logLevel=] [--skipInstall] [--skipConfig] [--dev] [--packageManager=] +npx nuxt add [--cwd=] [--logLevel=] [--skipInstall] [--skipConfig] [--dev] [--packageManager=] ``` @@ -27,14 +27,14 @@ The `add` command installs [Nuxt modules](/modules) and [layers](/docs/getting-s ## Options -| Option | Default | Description | -|------------------------------------------------------------|---------|-------------------------------------------------| -| `--cwd=` | `.` | Specify the root directory of your Nuxt project | -| `--logLevel=` | | Specify build-time log level | -| `--skipInstall` | | Skip npm install | -| `--skipConfig` | | Skip nuxt.config.ts update | -| `--dev` | | Install modules as dev dependencies | -| `--packageManager=` | | Package manager to install with | +| Option | Default | Description | +|-----------------------------------------------------------------|---------|-------------------------------------------------| +| `--cwd=` | `.` | Specify the root directory of your Nuxt project | +| `--logLevel=` | | Specify build-time log level | +| `--skipInstall` | | Skip npm install | +| `--skipConfig` | | Skip nuxt.config.ts update | +| `--dev` | | Install modules as dev dependencies | +| `--packageManager=` | | Package manager to install with | When running the command, it will: diff --git a/docs/init.md b/docs/init.md index c138851eb..719a83b0b 100644 --- a/docs/init.md +++ b/docs/init.md @@ -10,7 +10,7 @@ links: ```bash [Terminal] -npm create nuxt@latest [DIR] -- [--cwd=] [--logLevel=] [-t, --template=] [-f, --force] [--offline] [--preferOffline] [--install] [--gitInit] [--shell] [--packageManager=] [-M, --modules=] [--nightly=] +npm create nuxt@latest [DIR] -- [--cwd=] [--logLevel=] [-t, --template=] [-f, --force] [--offline] [--preferOffline] [--install] [--gitInit] [--shell] [--packageManager=] [-M, --modules=] [--nightly=] ``` @@ -33,23 +33,23 @@ The `create-nuxt` command initializes a fresh Nuxt project using [unjs/giget](ht ## Options -| Option | Default | Description | -|------------------------------------------------------------|---------|--------------------------------------------------------------------------------------| -| `--cwd=` | `.` | Specify the directory to create the project in | -| `--logLevel=` | | Specify build-time log level | -| `-t, --template=` | | Template name | -| `-f, --force` | | Override existing directory | -| `--offline` | | Force offline mode | -| `--preferOffline` | | Prefer offline mode | -| `--install` | `true` | Install dependencies once the project has been scaffolded | -| `--no-install` | | Skip installing dependencies | -| `--gitInit` | | Initialize git repository | -| `--no-gitInit` | | Skip git repository initialization | -| `--shell` | | Start shell after installation in project directory | -| `--packageManager=` | | Package manager choice | -| `-M, --modules=` | | Nuxt modules to install (comma separated without spaces) | -| `--no-modules` | | Skip module installation prompt | -| `--nightly=` | | Use Nuxt nightly release channel (a `nuxt-nightly` dist tag, defaulting to `latest`) | +| Option | Default | Description | +|-----------------------------------------------------------------|---------|--------------------------------------------------------------------------------------| +| `--cwd=` | `.` | Specify the directory to create the project in | +| `--logLevel=` | | Specify build-time log level | +| `-t, --template=` | | Template name | +| `-f, --force` | | Override existing directory | +| `--offline` | | Force offline mode | +| `--preferOffline` | | Prefer offline mode | +| `--install` | `true` | Install dependencies once the project has been scaffolded | +| `--no-install` | | Skip installing dependencies | +| `--gitInit` | | Initialize git repository | +| `--no-gitInit` | | Skip git repository initialization | +| `--shell` | | Start shell after installation in project directory | +| `--packageManager=` | | Package manager choice | +| `-M, --modules=` | | Nuxt modules to install (comma separated without spaces) | +| `--no-modules` | | Skip module installation prompt | +| `--nightly=` | | Use Nuxt nightly release channel (a `nuxt-nightly` dist tag, defaulting to `latest`) | ## Non-interactive use diff --git a/docs/module.md b/docs/module.md index 62f29d9db..e343f1cb4 100644 --- a/docs/module.md +++ b/docs/module.md @@ -14,7 +14,7 @@ Nuxt provides a few utilities to work with [Nuxt modules](/modules) seamlessly. ```bash [Terminal] -npx nuxt module add [--cwd=] [--logLevel=] [--skipInstall] [--skipConfig] [--dev] [--packageManager=] +npx nuxt module add [--cwd=] [--logLevel=] [--skipInstall] [--skipConfig] [--dev] [--packageManager=] ``` @@ -29,14 +29,14 @@ npx nuxt module add [--cwd=] [--logLevel= -| Option | Default | Description | -|------------------------------------------------------------|---------|-------------------------------------------------| -| `--cwd=` | `.` | Specify the root directory of your Nuxt project | -| `--logLevel=` | | Specify build-time log level | -| `--skipInstall` | | Skip npm install | -| `--skipConfig` | | Skip nuxt.config.ts update | -| `--dev` | | Install modules as dev dependencies | -| `--packageManager=` | | Package manager to install with | +| Option | Default | Description | +|-----------------------------------------------------------------|---------|-------------------------------------------------| +| `--cwd=` | `.` | Specify the root directory of your Nuxt project | +| `--logLevel=` | | Specify build-time log level | +| `--skipInstall` | | Skip npm install | +| `--skipConfig` | | Skip nuxt.config.ts update | +| `--dev` | | Install modules as dev dependencies | +| `--packageManager=` | | Package manager to install with | The command lets you install [Nuxt modules](/modules) in your application with no manual work. diff --git a/packages/create-nuxt/package.json b/packages/create-nuxt/package.json index 9ae415c7a..1b3183f00 100644 --- a/packages/create-nuxt/package.json +++ b/packages/create-nuxt/package.json @@ -35,7 +35,7 @@ "@types/node": "^24.19.1", "citty": "^0.2.2", "giget": "^3.3.1", - "package-manager-detector": "^1.8.0", + "package-manager-detector": "^1.9.0", "pathe": "^2.0.3", "pkg-types": "^2.3.3", "std-env": "^4.3.0", diff --git a/packages/nuxt-cli/package.json b/packages/nuxt-cli/package.json index 2a845976e..8ff4acb15 100644 --- a/packages/nuxt-cli/package.json +++ b/packages/nuxt-cli/package.json @@ -77,7 +77,7 @@ "get-port-please": "^3.2.0", "my-bad": "^0.2.9", "obug": "^3.0.0", - "package-manager-detector": "^1.8.0", + "package-manager-detector": "^1.9.0", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.3", diff --git a/packages/nuxt-cli/test/unit/help.spec.ts b/packages/nuxt-cli/test/unit/help.spec.ts index fe1f1c651..5180522c8 100644 --- a/packages/nuxt-cli/test/unit/help.spec.ts +++ b/packages/nuxt-cli/test/unit/help.spec.ts @@ -76,12 +76,12 @@ describe('help', () => { OPTIONS - --cwd= Specify the root directory of your Nuxt project (Default: .) - --logLevel= Specify build-time log level - --skipInstall Skip npm install - --skipConfig Skip nuxt.config.ts update - --dev Install modules as dev dependencies - --packageManager= Package manager to install with + --cwd= Specify the root directory of your Nuxt project (Default: .) + --logLevel= Specify build-time log level + --skipInstall Skip npm install + --skipConfig Skip nuxt.config.ts update + --dev Install modules as dev dependencies + --packageManager= Package manager to install with " `) }) @@ -488,12 +488,12 @@ describe('help', () => { OPTIONS - --cwd= Specify the root directory of your Nuxt project (Default: .) - --logLevel= Specify build-time log level - --skipInstall Skip npm install - --skipConfig Skip nuxt.config.ts update - --dev Install modules as dev dependencies - --packageManager= Package manager to install with + --cwd= Specify the root directory of your Nuxt project (Default: .) + --logLevel= Specify build-time log level + --skipInstall Skip npm install + --skipConfig Skip nuxt.config.ts update + --dev Install modules as dev dependencies + --packageManager= Package manager to install with " `) }) diff --git a/packages/nuxt-cli/test/unit/utils/package-managers.spec.ts b/packages/nuxt-cli/test/unit/utils/package-managers.spec.ts index 05e25444a..737cf8de2 100644 --- a/packages/nuxt-cli/test/unit/utils/package-managers.spec.ts +++ b/packages/nuxt-cli/test/unit/utils/package-managers.spec.ts @@ -29,12 +29,23 @@ describe('detectPackageManager', () => { expect((await detectPackageManager(app))?.name).toBe('pnpm') expect(await detectPackageManager(app, { includeParentDirs: false })).toBeUndefined() }) + + it('should detect upm from `upm.lock`', async () => { + const dir = await mkdtemp(join(tmpdir(), 'nuxt-pm-test-')) + await writeFile(join(dir, 'upm.lock'), '') + + expect(await detectPackageManager(dir)).toEqual({ name: 'upm', agent: 'upm' }) + }) }) describe('getLockFiles', () => { it('should not include workspace manifests', () => { expect(getLockFiles('pnpm')).toEqual(['pnpm-lock.yaml']) }) + + it('should return the upm lockfile', () => { + expect(getLockFiles('upm')).toEqual(['upm.lock']) + }) }) describe('getPackageManagerVersion', () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 26cfecc82..83ba0b62b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -322,8 +322,8 @@ importers: specifier: ^3.3.1 version: 3.3.1 package-manager-detector: - specifier: ^1.8.0 - version: 1.8.0 + specifier: ^1.9.0 + version: 1.9.0 pathe: specifier: ^2.0.3 version: 2.0.3 @@ -419,8 +419,8 @@ importers: specifier: '>=0.56.3' version: 0.150.0 package-manager-detector: - specifier: ^1.8.0 - version: 1.8.0 + specifier: ^1.9.0 + version: 1.9.0 pathe: specifier: ^2.0.3 version: 2.0.3 @@ -5113,6 +5113,9 @@ packages: package-manager-detector@1.8.0: resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} + package-manager-detector@1.9.0: + resolution: {integrity: sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA==} + parse-gitignore@2.0.0: resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} engines: {node: '>=14'} @@ -13018,6 +13021,8 @@ snapshots: package-manager-detector@1.8.0: {} + package-manager-detector@1.9.0: {} + parse-gitignore@2.0.0: {} parse-imports-exports@0.2.4: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0e3958e3f..fc3114f94 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,6 +8,7 @@ minimumReleaseAgeExclude: - fuzzysort@4.0.1 - errx - my-bad + - package-manager-detector@1.9.0 verifyDepsBeforeRun: install From a4b1b19cb67b34ddcac98021b0301ac3ef02e18b Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 6 Oct 2026 12:40:21 +0100 Subject: [PATCH 2/3] chore: revert tests + workspace update --- .../nuxt-cli/test/unit/utils/package-managers.spec.ts | 11 ----------- pnpm-workspace.yaml | 1 - 2 files changed, 12 deletions(-) diff --git a/packages/nuxt-cli/test/unit/utils/package-managers.spec.ts b/packages/nuxt-cli/test/unit/utils/package-managers.spec.ts index 737cf8de2..05e25444a 100644 --- a/packages/nuxt-cli/test/unit/utils/package-managers.spec.ts +++ b/packages/nuxt-cli/test/unit/utils/package-managers.spec.ts @@ -29,23 +29,12 @@ describe('detectPackageManager', () => { expect((await detectPackageManager(app))?.name).toBe('pnpm') expect(await detectPackageManager(app, { includeParentDirs: false })).toBeUndefined() }) - - it('should detect upm from `upm.lock`', async () => { - const dir = await mkdtemp(join(tmpdir(), 'nuxt-pm-test-')) - await writeFile(join(dir, 'upm.lock'), '') - - expect(await detectPackageManager(dir)).toEqual({ name: 'upm', agent: 'upm' }) - }) }) describe('getLockFiles', () => { it('should not include workspace manifests', () => { expect(getLockFiles('pnpm')).toEqual(['pnpm-lock.yaml']) }) - - it('should return the upm lockfile', () => { - expect(getLockFiles('upm')).toEqual(['upm.lock']) - }) }) describe('getPackageManagerVersion', () => { diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fc3114f94..0e3958e3f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,7 +8,6 @@ minimumReleaseAgeExclude: - fuzzysort@4.0.1 - errx - my-bad - - package-manager-detector@1.9.0 verifyDepsBeforeRun: install From 6c6cc42fd0a5c8673566449101def38d5818cf61 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2026 12:10:52 +0000 Subject: [PATCH 3/3] [autofix.ci] apply automated fixes --- packages/nuxt-cli/test/unit/utils/install.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/nuxt-cli/test/unit/utils/install.spec.ts b/packages/nuxt-cli/test/unit/utils/install.spec.ts index c6297efe1..cb432c882 100644 --- a/packages/nuxt-cli/test/unit/utils/install.spec.ts +++ b/packages/nuxt-cli/test/unit/utils/install.spec.ts @@ -134,7 +134,6 @@ describe.skipIf(process.platform === 'win32')('runInstall arguments', () => { const result = await runInstall({ cwd: dir, packageManager: { name: 'pnpm', agent: 'pnpm' }, dependencies: ['a'] }) expect(result.command).toBe('pnpm add --ignore-workspace-root-check a --config.confirm-modules-purge=false --config.strict-dep-builds=false') }) - }) describe('runDedupe', () => {