mirror of
https://github.com/pnpm/pnpm.git
synced 2026-04-27 18:46:18 -04:00
feat(init): add init-package-manager configuration (#9087)
--------- Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
6
.changeset/flat-pillows-attend.md
Normal file
6
.changeset/flat-pillows-attend.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@pnpm/plugin-commands-init": minor
|
||||
"pnpm": minor
|
||||
---
|
||||
|
||||
Add the `init-package-manager` configuration. When the value is set to `false`, `pnpm init` won't add the `packageManager` field to the initialized `package.json` file [#9087](https://github.com/pnpm/pnpm/pull/9087).
|
||||
@@ -214,6 +214,7 @@ export interface Config {
|
||||
strictStorePkgContentCheck: boolean
|
||||
managePackageManagerVersions: boolean
|
||||
strictDepBuilds: boolean
|
||||
initPackageManager: boolean
|
||||
}
|
||||
|
||||
export interface ConfigWithDeprecatedSettings extends Config {
|
||||
|
||||
@@ -148,6 +148,7 @@ export async function getConfig (opts: {
|
||||
'ignore-workspace-cycles': false,
|
||||
'ignore-workspace-root-check': false,
|
||||
'optimistic-repeat-install': false,
|
||||
'init-package-manager': true,
|
||||
'inject-workspace-packages': false,
|
||||
'link-workspace-packages': false,
|
||||
'lockfile-include-tarball-url': false,
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"@pnpm/cli-utils": "workspace:*",
|
||||
"@pnpm/config": "workspace:*",
|
||||
"@pnpm/error": "workspace:*",
|
||||
"@pnpm/types": "workspace:*",
|
||||
"@pnpm/write-project-manifest": "workspace:*",
|
||||
"camelcase-keys": "catalog:",
|
||||
"render-help": "catalog:"
|
||||
|
||||
@@ -2,8 +2,9 @@ import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { docsUrl } from '@pnpm/cli-utils'
|
||||
import { packageManager } from '@pnpm/cli-meta'
|
||||
import { type CliOptions, type UniversalOptions } from '@pnpm/config'
|
||||
import { type Config, type UniversalOptions } from '@pnpm/config'
|
||||
import { PnpmError } from '@pnpm/error'
|
||||
import { type ProjectManifest } from '@pnpm/types'
|
||||
import { writeProjectManifest } from '@pnpm/write-project-manifest'
|
||||
import renderHelp from 'render-help'
|
||||
import { parseRawConfig } from './utils'
|
||||
@@ -26,7 +27,7 @@ export function help (): string {
|
||||
}
|
||||
|
||||
export async function handler (
|
||||
opts: Pick<UniversalOptions, 'rawConfig'> & { cliOptions: CliOptions },
|
||||
opts: Pick<UniversalOptions, 'rawConfig'> & Pick<Config, 'cliOptions'> & Partial<Pick<Config, 'initPackageManager'>>,
|
||||
params?: string[]
|
||||
): Promise<string> {
|
||||
if (params?.length) {
|
||||
@@ -41,12 +42,11 @@ export async function handler (
|
||||
if (fs.existsSync(manifestPath)) {
|
||||
throw new PnpmError('PACKAGE_JSON_EXISTS', 'package.json already exists')
|
||||
}
|
||||
const manifest = {
|
||||
const manifest: ProjectManifest = {
|
||||
name: path.basename(process.cwd()),
|
||||
version: '1.0.0',
|
||||
description: '',
|
||||
main: 'index.js',
|
||||
packageManager: `pnpm@${packageManager.version}`,
|
||||
scripts: {
|
||||
test: 'echo "Error: no test specified" && exit 1',
|
||||
},
|
||||
@@ -56,6 +56,9 @@ export async function handler (
|
||||
}
|
||||
const config = await parseRawConfig(opts.rawConfig)
|
||||
const packageJson = { ...manifest, ...config }
|
||||
if (opts.initPackageManager) {
|
||||
packageJson.packageManager = `pnpm@${packageManager.version}`
|
||||
}
|
||||
await writeProjectManifest(manifestPath, packageJson, {
|
||||
indent: 2,
|
||||
})
|
||||
|
||||
@@ -2,6 +2,7 @@ import path from 'path'
|
||||
import fs from 'fs'
|
||||
import { init } from '@pnpm/plugin-commands-init'
|
||||
import { prepare, prepareEmpty } from '@pnpm/prepare'
|
||||
import { type ProjectManifest } from '@pnpm/types'
|
||||
import { sync as loadJsonFile } from 'load-json-file'
|
||||
|
||||
test('init a new package.json', async () => {
|
||||
@@ -67,3 +68,19 @@ test('init a new package.json if a package.json exists in the current directory
|
||||
const manifest = loadJsonFile(path.resolve('empty-dir2/package.json'))
|
||||
expect(manifest).toBeTruthy()
|
||||
})
|
||||
|
||||
test('init a new package.json with init-package-manager=true', async () => {
|
||||
prepareEmpty()
|
||||
await init.handler({ rawConfig: {}, cliOptions: {}, initPackageManager: true })
|
||||
const manifest = loadJsonFile<ProjectManifest>(path.resolve('package.json'))
|
||||
expect(manifest).toBeTruthy()
|
||||
expect(manifest.packageManager).toBeTruthy()
|
||||
})
|
||||
|
||||
test('init a new package.json with init-package-manager=false', async () => {
|
||||
prepareEmpty()
|
||||
await init.handler({ rawConfig: {}, cliOptions: {}, initPackageManager: false })
|
||||
const manifest = loadJsonFile<ProjectManifest>(path.resolve('package.json'))
|
||||
expect(manifest).toBeTruthy()
|
||||
expect(manifest.packageManager).toBeFalsy()
|
||||
})
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
},
|
||||
{
|
||||
"path": "../error"
|
||||
},
|
||||
{
|
||||
"path": "../types"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
3
pnpm-lock.yaml
generated
3
pnpm-lock.yaml
generated
@@ -3952,6 +3952,9 @@ importers:
|
||||
'@pnpm/error':
|
||||
specifier: workspace:*
|
||||
version: link:../error
|
||||
'@pnpm/types':
|
||||
specifier: workspace:*
|
||||
version: link:../types
|
||||
'@pnpm/write-project-manifest':
|
||||
specifier: workspace:*
|
||||
version: link:../../pkg-manifest/write-project-manifest
|
||||
|
||||
Reference in New Issue
Block a user