diff --git a/packages/workspace/src/generators/new/generate-workspace-files.spec.ts b/packages/workspace/src/generators/new/generate-workspace-files.spec.ts index 98911f9f18883..ffd3c0f034439 100644 --- a/packages/workspace/src/generators/new/generate-workspace-files.spec.ts +++ b/packages/workspace/src/generators/new/generate-workspace-files.spec.ts @@ -384,13 +384,43 @@ describe('@nx/workspace:generateWorkspaceFiles', () => { workspaceGlobs: ['apps/*', 'packages/*'], }); - const packageJson = tree.read('/proj/pnpm-workspace.yaml', 'utf-8'); - expect(packageJson).toMatchInlineSnapshot(` + const pnpmWorkspace = tree.read('/proj/pnpm-workspace.yaml', 'utf-8'); + expect(pnpmWorkspace).toMatchInlineSnapshot(` + "packages: + - "apps/*" + - "packages/*" + + autoInstallPeers: true + onlyBuiltDependencies: + - nx + " + `); + expect(tree.exists('proj/.npmrc')).toBeFalsy(); + }); + + it('should configure the pnpm settings in pnpm-workspace.yaml with allowBuilds for pnpm 11+', async () => { + tree.write('proj/package.json', JSON.stringify({})); + jest.spyOn(devkit, 'getPackageManagerVersion').mockReturnValue('11.0.0'); + + await generateWorkspaceFiles(tree, { + name: 'proj', + directory: 'proj', + preset: Preset.NPM, + defaultBase: 'main', + packageManager: 'pnpm', + isCustomPreset: false, + workspaceGlobs: ['apps/*', 'packages/*'], + }); + + const pnpmWorkspace = tree.read('/proj/pnpm-workspace.yaml', 'utf-8'); + expect(pnpmWorkspace).toMatchInlineSnapshot(` "packages: - "apps/*" - "packages/*" autoInstallPeers: true + allowBuilds: + nx: true " `); expect(tree.exists('proj/.npmrc')).toBeFalsy(); diff --git a/packages/workspace/src/generators/new/generate-workspace-files.ts b/packages/workspace/src/generators/new/generate-workspace-files.ts index fa43c348c91d8..cc1551ef5bb34 100644 --- a/packages/workspace/src/generators/new/generate-workspace-files.ts +++ b/packages/workspace/src/generators/new/generate-workspace-files.ts @@ -198,7 +198,7 @@ export async function generateWorkspaceFiles( const [packageMajor] = packageManagerVersion.split('.'); if (options.packageManager === 'pnpm' && +packageMajor >= 7) { if (gte(packageManagerVersion, '10.6.0')) { - addPnpmSettings(tree, options); + addPnpmSettings(tree, options, packageManagerVersion); } else { createNpmrc(tree, options); } @@ -335,13 +335,18 @@ async function createReadme( }); } -// ensure that pnpm install add all the missing peer deps +function addPnpmSettings( + tree: Tree, + options: NormalizedSchema, + packageManagerVersion: string +) { + const buildAllowlist = gte(packageManagerVersion, '11.0.0') + ? `allowBuilds:\n nx: true` + : `onlyBuiltDependencies:\n - nx`; -function addPnpmSettings(tree: Tree, options: NormalizedSchema) { tree.write( join(options.directory, 'pnpm-workspace.yaml'), - `autoInstallPeers: true -` + `autoInstallPeers: true\n${buildAllowlist}\n` ); }