From ae2f845c5deaf8ce32037f8da6a720fc1841e9e6 Mon Sep 17 00:00:00 2001 From: spencer17x <1253478653@qq.com> Date: Fri, 27 May 2022 08:05:20 +0800 Subject: [PATCH] fix: only devDependencies are installed regardless of the node env (#4805) close #4745 --- .changeset/green-geckos-scream.md | 6 ++++++ packages/config/src/index.ts | 9 +++++++++ packages/pnpm/test/install/only.ts | 9 +++++++++ 3 files changed, 24 insertions(+) create mode 100644 .changeset/green-geckos-scream.md diff --git a/.changeset/green-geckos-scream.md b/.changeset/green-geckos-scream.md new file mode 100644 index 00000000000..e15dcdab967 --- /dev/null +++ b/.changeset/green-geckos-scream.md @@ -0,0 +1,6 @@ +--- +"@pnpm/config": patch +"pnpm": patch +--- + +`NODE_ENV=production pnpm install --dev` should only install dev deps [#4745](https://github.com/pnpm/pnpm/pull/4745). diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index 836ceb81235..d5f13160df4 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -338,6 +338,15 @@ export default async ( pnpmConfig.packageManager = packageManager + if (env.NODE_ENV) { + if (cliOptions.production) { + pnpmConfig.only = 'production' + } + if (cliOptions.dev) { + pnpmConfig.only = 'dev' + } + } + if (pnpmConfig.only === 'prod' || pnpmConfig.only === 'production' || !pnpmConfig.only && pnpmConfig.production) { pnpmConfig.production = true pnpmConfig.dev = false diff --git a/packages/pnpm/test/install/only.ts b/packages/pnpm/test/install/only.ts index f9761bfcf94..2b1e732e52d 100644 --- a/packages/pnpm/test/install/only.ts +++ b/packages/pnpm/test/install/only.ts @@ -26,6 +26,15 @@ test('production install (with production NODE_ENV)', async () => { await project.has('is-positive') }) +test('dev dependencies install (with production NODE_ENV)', async () => { + const project = prepare(basicPackageManifest) + + await execPnpm(['install', '--dev'], { env: { NODE_ENV: 'production' } }) + + await project.hasNot(Object.keys(basicPackageManifest.dependencies!)[0]) + await project.has('@rstacruz/tap-spec') +}) + test('install dev dependencies only', async () => { const project = prepare({ dependencies: {