From 92d5aa660e9591cebabb73b791968967640dc043 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Mon, 25 Jul 2022 03:26:25 +0300 Subject: [PATCH] fix: symlink a workspace pkg correctly, when it has a custom publish dir close #3901 --- packages/npm-resolver/src/index.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/npm-resolver/src/index.ts b/packages/npm-resolver/src/index.ts index b1e1711e8c6..238d3b21c59 100644 --- a/packages/npm-resolver/src/index.ts +++ b/packages/npm-resolver/src/index.ts @@ -291,11 +291,13 @@ function pickMatchingLocalVersionOrNull ( } } +interface LocalPackage { + dir: string + manifest: DependencyManifest +} + function resolveFromLocalPackage ( - localPackage: { - dir: string - manifest: DependencyManifest - }, + localPackage: LocalPackage, normalizedPref: string | undefined, opts: { hardLinkLocalPackages?: boolean @@ -305,12 +307,13 @@ function resolveFromLocalPackage ( ) { let id!: string let directory!: string + const localPackageDir = resolveLocalPackageDir(localPackage) if (opts.hardLinkLocalPackages) { - directory = normalize(path.relative(opts.lockfileDir!, localPackage.dir)) + directory = normalize(path.relative(opts.lockfileDir!, localPackageDir)) id = `file:${directory}` } else { - directory = localPackage.dir - id = `link:${normalize(path.relative(opts.projectDir, localPackage.dir))}` + directory = localPackageDir + id = `link:${normalize(path.relative(opts.projectDir, localPackageDir))}` } return { id, @@ -324,6 +327,11 @@ function resolveFromLocalPackage ( } } +function resolveLocalPackageDir (localPackage: LocalPackage) { + if (localPackage.manifest.publishConfig?.directory == null) return localPackage.dir + return path.join(localPackage.dir, localPackage.manifest.publishConfig.directory) +} + function defaultTagForAlias (alias: string, defaultTag: string): RegistryPackageSpec { return { fetchSpec: defaultTag,