From aacb83f734dff7a9af85e9a084c9824fdc6ece66 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Tue, 25 Oct 2022 12:20:17 +0300 Subject: [PATCH] fix: print a warning if a package.json uses workspaces field (#5547) close #5363 close #5413 --- .changeset/twelve-bikes-serve.md | 6 +++ packages/config/package.json | 1 + packages/config/src/index.ts | 5 +- .../pkg-using-workspaces/package.json | 3 ++ packages/config/test/index.ts | 30 ++++++++++++ packages/config/tsconfig.json | 3 ++ pnpm-lock.yaml | 47 ++++++++++--------- 7 files changed, 72 insertions(+), 23 deletions(-) create mode 100644 .changeset/twelve-bikes-serve.md create mode 100644 packages/config/test/fixtures/pkg-using-workspaces/package.json diff --git a/.changeset/twelve-bikes-serve.md b/.changeset/twelve-bikes-serve.md new file mode 100644 index 00000000000..714d571a916 --- /dev/null +++ b/.changeset/twelve-bikes-serve.md @@ -0,0 +1,6 @@ +--- +"@pnpm/config": patch +"pnpm": patch +--- + +Print a warning if a package.json has a workspaces field but there is no pnpm-workspace.yaml file [#5363](https://github.com/pnpm/pnpm/issues/5363). diff --git a/packages/config/package.json b/packages/config/package.json index e19f186840d..20fbb7cd2ce 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -54,6 +54,7 @@ "devDependencies": { "@pnpm/config": "workspace:*", "@pnpm/prepare": "workspace:*", + "@pnpm/test-fixtures": "workspace:*", "@types/is-windows": "^1.0.0", "@types/ramda": "0.28.15", "@types/which": "^2.0.1", diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index a76a8e021f3..4ff1990a5bd 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -524,7 +524,10 @@ export async function getConfig ( if (!pnpmConfig.ignorePnpmfile) { pnpmConfig.hooks = requireHooks(pnpmConfig.lockfileDir ?? pnpmConfig.dir, pnpmConfig) } - pnpmConfig.rootProjectManifest = await safeReadProjectManifestOnly(pnpmConfig.lockfileDir ?? pnpmConfig.dir) ?? undefined + pnpmConfig.rootProjectManifest = await safeReadProjectManifestOnly(pnpmConfig.lockfileDir ?? pnpmConfig.workspaceDir ?? pnpmConfig.dir) ?? undefined + if (pnpmConfig.rootProjectManifest?.['workspaces']?.length && !pnpmConfig.workspaceDir) { + warnings.push('The "workspaces" field in package.json is not supported by pnpm. Create a "pnpm-workspace.yaml" file instead.') + } pnpmConfig.failedToLoadBuiltInConfig = failedToLoadBuiltInConfig diff --git a/packages/config/test/fixtures/pkg-using-workspaces/package.json b/packages/config/test/fixtures/pkg-using-workspaces/package.json new file mode 100644 index 00000000000..e5e2f6f5df2 --- /dev/null +++ b/packages/config/test/fixtures/pkg-using-workspaces/package.json @@ -0,0 +1,3 @@ +{ + "workspaces": ["packages/*"] +} diff --git a/packages/config/test/index.ts b/packages/config/test/index.ts index cbfe18ca295..4f40a854ad2 100644 --- a/packages/config/test/index.ts +++ b/packages/config/test/index.ts @@ -7,6 +7,7 @@ import { getConfig } from '@pnpm/config' import { PnpmError } from '@pnpm/error' import loadNpmConf from '@pnpm/npm-conf' import { prepare, prepareEmpty } from '@pnpm/prepare' +import { fixtures } from '@pnpm/test-fixtures' import symlinkDir from 'symlink-dir' @@ -26,6 +27,7 @@ const env = { PNPM_HOME: __dirname, [PATH]: __dirname, } +const f = fixtures(__dirname) test('getConfig()', async () => { const { config } = await getConfig({ @@ -941,3 +943,31 @@ test('getConfig() returns failedToLoadBuiltInConfig', async () => { expect(config.failedToLoadBuiltInConfig).toBeDefined() }) + +test('return a warning if a package.json has workspaces field but there is no pnpm-workspaces.yaml file', async () => { + const prefix = f.find('pkg-using-workspaces') + const { warnings } = await getConfig({ + cliOptions: { dir: prefix }, + packageManager: { + name: 'pnpm', + version: '1.0.0', + }, + }) + + expect(warnings).toStrictEqual([ + 'The "workspaces" field in package.json is not supported by pnpm. Create a "pnpm-workspace.yaml" file instead.', + ]) +}) + +test('do not return a warning if a package.json has workspaces field and there is a pnpm-workspace.yaml file', async () => { + const prefix = f.find('pkg-using-workspaces') + const { warnings } = await getConfig({ + cliOptions: { dir: prefix }, + workspaceDir: prefix, + packageManager: { + name: 'pnpm', + version: '1.0.0', + }, + }) + expect(warnings).toStrictEqual([]) +}) diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json index 7a6e0ef56be..e2bf7a28dcf 100644 --- a/packages/config/tsconfig.json +++ b/packages/config/tsconfig.json @@ -12,6 +12,9 @@ { "path": "../../privatePackages/prepare" }, + { + "path": "../../privatePackages/test-fixtures" + }, { "path": "../constants" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82ae373a302..3efda061a37 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -214,22 +214,6 @@ importers: specifier: 13.2.9 version: 13.2.9 - packages/network.auth-header: - dependencies: - '@pnpm/error': - specifier: workspace:* - version: link:../error - nerf-dart: - specifier: 1.0.0 - version: 1.0.0 - devDependencies: - '@pnpm/network.auth-header': - specifier: workspace:* - version: 'link:' - safe-buffer: - specifier: 5.2.1 - version: 5.2.1 - packages/build-modules: dependencies: '@pnpm/calc-dep-state': @@ -432,9 +416,6 @@ importers: packages/client: dependencies: - '@pnpm/network.auth-header': - specifier: workspace:* - version: link:../network.auth-header '@pnpm/default-resolver': specifier: workspace:* version: link:../default-resolver @@ -450,6 +431,9 @@ importers: '@pnpm/git-fetcher': specifier: workspace:* version: link:../git-fetcher + '@pnpm/network.auth-header': + specifier: workspace:* + version: link:../network.auth-header '@pnpm/resolver-base': specifier: workspace:* version: link:../resolver-base @@ -539,6 +523,9 @@ importers: '@pnpm/prepare': specifier: workspace:* version: link:../../privatePackages/prepare + '@pnpm/test-fixtures': + specifier: workspace:* + version: link:../../privatePackages/test-fixtures '@types/is-windows': specifier: ^1.0.0 version: 1.0.0 @@ -2422,6 +2409,22 @@ importers: specifier: ^3.0.2 version: 3.0.2 + packages/network.auth-header: + dependencies: + '@pnpm/error': + specifier: workspace:* + version: link:../error + nerf-dart: + specifier: 1.0.0 + version: 1.0.0 + devDependencies: + '@pnpm/network.auth-header': + specifier: workspace:* + version: 'link:' + safe-buffer: + specifier: 5.2.1 + version: 5.2.1 + packages/node.fetcher: dependencies: '@pnpm/create-cafs-store': @@ -2999,9 +3002,6 @@ importers: '@pnpm/audit': specifier: workspace:* version: link:../audit - '@pnpm/network.auth-header': - specifier: workspace:* - version: link:../network.auth-header '@pnpm/cli-utils': specifier: workspace:* version: link:../cli-utils @@ -3017,6 +3017,9 @@ importers: '@pnpm/lockfile-file': specifier: workspace:* version: link:../lockfile-file + '@pnpm/network.auth-header': + specifier: workspace:* + version: link:../network.auth-header '@pnpm/read-project-manifest': specifier: workspace:* version: link:../read-project-manifest