From cf226fb3495129302d6ebe1e9e78e0408ccb3ef1 Mon Sep 17 00:00:00 2001 From: Eric Eldredge Date: Fri, 20 Jan 2023 14:27:48 -0500 Subject: [PATCH] Fix missing bin link for namespaced links --- .../integration-tests/test/parcel-link.js | 6 ++++++ packages/dev/parcel-link/src/link.js | 2 ++ packages/dev/parcel-link/src/unlink.js | 2 ++ packages/dev/parcel-link/src/utils.js | 20 ++++++++++--------- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/core/integration-tests/test/parcel-link.js b/packages/core/integration-tests/test/parcel-link.js index 74cb36778f5..6ca7cf9529f 100644 --- a/packages/core/integration-tests/test/parcel-link.js +++ b/packages/core/integration-tests/test/parcel-link.js @@ -212,6 +212,7 @@ describe('@parcel/link', () => { let fs = await createFS('/app')` yarn.lock: node_modules + .bin/parcel: @namespace parcel parcel-core`; @@ -221,6 +222,11 @@ describe('@parcel/link', () => { assert(fs.existsSync('.parcel-link')); + assert.equal( + fs.realpathSync('node_modules/.bin/parcel'), + path.resolve(__dirname, '../../parcel/src/bin.js'), + ); + assert.equal( fs.realpathSync('node_modules/@namespace/parcel-core'), path.resolve(__dirname, '../../core'), diff --git a/packages/dev/parcel-link/src/link.js b/packages/dev/parcel-link/src/link.js index 14aec408dc1..3c6e7189466 100644 --- a/packages/dev/parcel-link/src/link.js +++ b/packages/dev/parcel-link/src/link.js @@ -6,6 +6,7 @@ import type {CmdOptions} from './utils'; import { findParcelPackages, mapNamespacePackageAliases, + cleanupBin, cleanupNodeModules, fsWrite, fsSymlink, @@ -40,6 +41,7 @@ export async function link( // -------------------------------------------------------------------------------- for (let nodeModules of nodeModulesPaths) { + await cleanupBin(nodeModules, opts); await cleanupNodeModules( nodeModules, packageName => parcelPackages.has(packageName), diff --git a/packages/dev/parcel-link/src/unlink.js b/packages/dev/parcel-link/src/unlink.js index a0ef1b06ff8..984d7378417 100644 --- a/packages/dev/parcel-link/src/unlink.js +++ b/packages/dev/parcel-link/src/unlink.js @@ -4,6 +4,7 @@ import type {ParcelLinkConfig} from './ParcelLinkConfig'; import type {CmdOptions} from './utils'; import { + cleanupBin, cleanupNodeModules, execSync, findParcelPackages, @@ -41,6 +42,7 @@ export async function unlink( // -------------------------------------------------------------------------------- for (let nodeModules of nodeModulesPaths) { + await cleanupBin(nodeModules, opts); await cleanupNodeModules( nodeModules, packageName => parcelPackages.has(packageName), diff --git a/packages/dev/parcel-link/src/utils.js b/packages/dev/parcel-link/src/utils.js index 916affcbb25..58358b67bb2 100644 --- a/packages/dev/parcel-link/src/utils.js +++ b/packages/dev/parcel-link/src/utils.js @@ -101,6 +101,16 @@ export function mapNamespacePackageAliases( return aliasesToParcelPackages; } +export async function cleanupBin(root: string, opts: CmdOptions) { + let {fs} = opts; + let binSymlink = path.join(root, '.bin/parcel'); + try { + await fsDelete(binSymlink, opts); + } catch (e) { + // noop + } +} + export async function cleanupNodeModules( root: string, predicate: (filepath: string) => boolean, @@ -108,16 +118,8 @@ export async function cleanupNodeModules( ): Promise { let {fs} = opts; for (let dirName of fs.readdirSync(root)) { + if (dirName === '.bin') continue; let dirPath = path.join(root, dirName); - if (dirName === '.bin') { - let binSymlink = path.join(root, '.bin/parcel'); - try { - await fsDelete(binSymlink, opts); - } catch (e) { - // noop - } - continue; - } if (dirName[0].startsWith('@')) { await cleanupNodeModules(dirPath, predicate, opts); continue;