diff --git a/.changeset/init-dev-engines-package-manager.md b/.changeset/init-dev-engines-package-manager.md new file mode 100644 index 0000000000..460d5384ec --- /dev/null +++ b/.changeset/init-dev-engines-package-manager.md @@ -0,0 +1,6 @@ +--- +"@pnpm/workspace.commands": minor +"pnpm": minor +--- + +`pnpm init` now writes a `devEngines.packageManager` field instead of the `packageManager` field when `init-package-manager` is enabled. diff --git a/workspace/commands/src/init.ts b/workspace/commands/src/init.ts index 976ed98959..38df7d92bd 100644 --- a/workspace/commands/src/init.ts +++ b/workspace/commands/src/init.ts @@ -39,7 +39,7 @@ export function help (): string { name: '--init-type ', }, { - description: 'Pin the project to the current pnpm version by adding a "packageManager" field to package.json', + description: 'Declare a pnpm version range via "devEngines.packageManager" in package.json and auto-download pnpm when it is missing', name: '--init-package-manager', }, { @@ -103,7 +103,14 @@ export async function handler (opts: InitOptions, params?: string[]): Promise [key, index])) const sortedPackageJson = sortKeysByPriority({ priority }, packageJson) await writeProjectManifest(manifestPath, sortedPackageJson, { diff --git a/workspace/commands/test/init.test.ts b/workspace/commands/test/init.test.ts index 68b0640a95..03dc6eb27b 100644 --- a/workspace/commands/test/init.test.ts +++ b/workspace/commands/test/init.test.ts @@ -73,7 +73,12 @@ test('init a new package.json with init-package-manager=true', async () => { await init.handler({ cliOptions: {}, initPackageManager: true }) const manifest = loadJsonFileSync(path.resolve('package.json')) expect(manifest).toBeTruthy() - expect(manifest.packageManager).toBeTruthy() + expect(manifest).not.toHaveProperty('packageManager') + expect(manifest.devEngines?.packageManager).toEqual({ + name: 'pnpm', + version: expect.stringMatching(/^\^\d+\.\d+\.\d+/), + onFail: 'download', + }) }) test('init a new package.json with init-package-manager=false', async () => { @@ -82,6 +87,7 @@ test('init a new package.json with init-package-manager=false', async () => { const manifest = loadJsonFileSync(path.resolve('package.json')) expect(manifest).toBeTruthy() expect(manifest).not.toHaveProperty('packageManager') + expect(manifest).not.toHaveProperty('devEngines') }) test('init a new package.json with init-type=module', async () => {