mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-27 11:31:45 -04:00
fix: default to ['.'] for workspacePackagePatterns when packages field is missing (#10996)
Commit6eedf828bremoved the ['.'] fallback for workspacePackagePatterns when pnpm-workspace.yaml has no packages field. This caused findPackages to default to ['.', '**'], discovering ALL directories with package.json as workspace projects. This is the same regression that was previously reverted in595cd414f(close #10571), reintroduced by #10127. Projects like cdxgen that use pnpm-workspace.yaml only for settings (e.g. minimumReleaseAge) without a packages field were broken because test data directories were picked up as workspace projects. close #10909
This commit is contained in:
6
.changeset/fix-workspace-package-discovery.md
Normal file
6
.changeset/fix-workspace-package-discovery.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@pnpm/fs.find-packages": patch
|
||||
"pnpm": patch
|
||||
---
|
||||
|
||||
Fix a regression where `pnpm-workspace.yaml` without a `packages` field caused all directories to be treated as workspace projects. This broke projects that use `pnpm-workspace.yaml` only for settings (e.g. `minimumReleaseAge`) without defining workspace packages [#10909](https://github.com/pnpm/pnpm/issues/10909).
|
||||
@@ -408,7 +408,7 @@ export async function getConfig (opts: {
|
||||
if (pnpmConfig.workspaceDir != null) {
|
||||
const workspaceManifest = await readWorkspaceManifest(pnpmConfig.workspaceDir)
|
||||
|
||||
pnpmConfig.workspacePackagePatterns = cliOptions['workspace-packages'] as string[] ?? workspaceManifest?.packages
|
||||
pnpmConfig.workspacePackagePatterns = cliOptions['workspace-packages'] as string[] ?? workspaceManifest?.packages ?? ['.']
|
||||
if (workspaceManifest) {
|
||||
addSettingsFromWorkspaceManifestToConfig(pnpmConfig, {
|
||||
configFromCliOpts,
|
||||
|
||||
1
config/reader/test/fixtures/workspace-yaml-without-packages/pnpm-workspace.yaml
vendored
Normal file
1
config/reader/test/fixtures/workspace-yaml-without-packages/pnpm-workspace.yaml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
minimumReleaseAge: 4320
|
||||
@@ -815,6 +815,21 @@ test('reads workspacePackagePatterns', async () => {
|
||||
expect(config.workspacePackagePatterns).toEqual(['packages/*'])
|
||||
})
|
||||
|
||||
test('workspacePackagePatterns defaults to ["."] when pnpm-workspace.yaml has no packages field', async () => {
|
||||
const workspaceDir = path.join(import.meta.dirname, 'fixtures/workspace-yaml-without-packages')
|
||||
process.chdir(workspaceDir)
|
||||
const { config } = await getConfig({
|
||||
cliOptions: {},
|
||||
packageManager: {
|
||||
name: 'pnpm',
|
||||
version: '1.0.0',
|
||||
},
|
||||
workspaceDir,
|
||||
})
|
||||
|
||||
expect(config.workspacePackagePatterns).toEqual(['.'])
|
||||
})
|
||||
|
||||
test('setting workspace-concurrency to negative number', async () => {
|
||||
const workspaceDir = path.join(import.meta.dirname, 'fixtures/pkg-with-valid-workspace-yaml')
|
||||
process.chdir(workspaceDir)
|
||||
|
||||
@@ -286,6 +286,7 @@ test('recursive command with filter from config', async () => {
|
||||
|
||||
fs.writeFileSync('package.json', '{}', 'utf8')
|
||||
writeYamlFileSync('pnpm-workspace.yaml', {
|
||||
packages: ['*'],
|
||||
filter: ['project-1', 'project-2'],
|
||||
})
|
||||
await execPnpm(['recursive', 'install'])
|
||||
|
||||
Reference in New Issue
Block a user