feat: support check more invalid workspace file (#10319)

close #10313

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
btea
2026-01-28 00:28:14 +08:00
committed by Zoltan Kochan
parent 9b0c33c522
commit 25ed567b66
3 changed files with 37 additions and 12 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/find-workspace-dir": patch
---
Throw an error message if a `.pnpm-workspace.yaml` or `.pnpm-workspace.yml` file is found instead of a `pnpm-workspace.yaml`.

View File

@@ -61,19 +61,31 @@ test('no projects found', async () => {
}
})
test('incorrect workspace manifest', async () => {
preparePackages([
{
name: 'project',
version: '1.0.0',
},
])
const invalidWorkspaceManifests = [
'pnpm-workspaces.yaml',
'pnpm-workspaces.yml',
'pnpm-workspace.yml',
'.pnpm-workspaces.yaml',
'.pnpm-workspaces.yml',
'.pnpm-workspace.yml',
'.pnpm-workspace.yaml',
]
writeYamlFile('pnpm-workspace.yml', { packages: ['**', '!store/**'] })
invalidWorkspaceManifests.forEach((filename) => {
test('incorrect workspace manifest ' + filename, async () => {
preparePackages([
{
name: 'project',
version: '1.0.0',
},
])
const { status, stderr } = execPnpmSync(['install'])
expect(stderr.toString()).toMatch(/The workspace manifest file should be named "pnpm-workspace.yaml"/)
expect(status).toBe(1)
writeYamlFile(filename, { packages: ['**', '!store/**'] })
const { status, stderr } = execPnpmSync(['install'])
expect(stderr.toString()).toMatch(/The workspace manifest file should be named "pnpm-workspace.yaml"/)
expect(status).toBe(1)
})
})
test('linking a package inside a monorepo with --link-workspace-packages when installing new dependencies', async () => {

View File

@@ -5,7 +5,15 @@ import findUp from 'find-up'
const WORKSPACE_DIR_ENV_VAR = 'NPM_CONFIG_WORKSPACE_DIR'
const WORKSPACE_MANIFEST_FILENAME = 'pnpm-workspace.yaml'
const INVALID_WORKSPACE_MANIFEST_FILENAME = ['pnpm-workspaces.yaml', 'pnpm-workspaces.yml', 'pnpm-workspace.yml']
const INVALID_WORKSPACE_MANIFEST_FILENAME = [
'pnpm-workspaces.yaml',
'pnpm-workspaces.yml',
'pnpm-workspace.yml',
'.pnpm-workspace.yaml',
'.pnpm-workspace.yml',
'.pnpm-workspaces.yaml',
'.pnpm-workspaces.yml',
]
export async function findWorkspaceDir (cwd: string): Promise<string | undefined> {
const workspaceManifestDirEnvVar = process.env[WORKSPACE_DIR_ENV_VAR] ?? process.env[WORKSPACE_DIR_ENV_VAR.toLowerCase()]