From 03eace5d05b9da3bc545742279b2dfb5ec78d060 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Mon, 3 Jan 2022 20:03:59 +0200 Subject: [PATCH] fix: installing in single project of a workspace close #4073 --- .../core/test/hoistedNodeLinker/install.ts | 45 ++++++++++++++++++- packages/headless/src/index.ts | 2 +- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/packages/core/test/hoistedNodeLinker/install.ts b/packages/core/test/hoistedNodeLinker/install.ts index 40462e08e1..c60ff099cb 100644 --- a/packages/core/test/hoistedNodeLinker/install.ts +++ b/packages/core/test/hoistedNodeLinker/install.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import { addDependenciesToPackage, install } from '@pnpm/core' +import { addDependenciesToPackage, install, mutateModules } from '@pnpm/core' import { prepareEmpty } from '@pnpm/prepare' import { sync as loadJsonFile } from 'load-json-file' import { addDistTag, testDefaults } from '../utils' @@ -66,3 +66,46 @@ test('preserve subdeps on update', async () => { expect(loadJsonFile<{ version: string }>('node_modules/foobarqar/package.json').version).toBe('1.0.1') expect(loadJsonFile<{ version: string }>('node_modules/foobarqar/node_modules/bar/package.json').version).toBe('100.0.0') }) + +test('adding a new dependency to one of the the workspace projects', async () => { + prepareEmpty() + + let [{ manifest }] = await mutateModules([ + { + buildIndex: 0, + manifest: { + name: 'project-1', + version: '1.0.0', + + dependencies: { + bar: '100.0.0', + }, + }, + mutation: 'install', + rootDir: path.resolve('project-1'), + }, + { + buildIndex: 1, + manifest: { + name: 'project-2', + version: '1.0.0', + + dependencies: { + foobarqar: '1.0.0', + }, + }, + mutation: 'install', + rootDir: path.resolve('project-2'), + }, + ], await testDefaults({ nodeLinker: 'hoisted' })) + manifest = await addDependenciesToPackage( + manifest, + ['is-negative@1.0.0'], + await testDefaults({ nodeLinker: 'hoisted', prefix: path.resolve('project-1'), targetDependenciesField: 'devDependencies' }) + ) + + expect(manifest.dependencies).toStrictEqual({ bar: '100.0.0' }) + expect(manifest.devDependencies).toStrictEqual({ 'is-negative': '1.0.0' }) + expect(loadJsonFile<{ version: string }>('node_modules/bar/package.json').version).toBe('100.0.0') + expect(loadJsonFile<{ version: string }>('node_modules/is-negative/package.json').version).toBe('1.0.0') +}) diff --git a/packages/headless/src/index.ts b/packages/headless/src/index.ts index 6c1830feaa..39a0e119a7 100644 --- a/packages/headless/src/index.ts +++ b/packages/headless/src/index.ts @@ -217,7 +217,7 @@ export default async (opts: HeadlessOptions) => { registries: opts.registries, skipped, } - const importerIds = opts.ignorePackageManifest + const importerIds = (opts.ignorePackageManifest === true || opts.nodeLinker === 'hoisted') ? Object.keys(wantedLockfile.importers) : opts.projects.map(({ id }) => id) const filteredLockfile = filterLockfileByImportersAndEngine(wantedLockfile, importerIds, {