From 24af41f20ba6d28eb601e4778296cc2ec3248c86 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sat, 1 Aug 2020 19:43:42 +0300 Subject: [PATCH] fix: ignore files in node_modules PR #2741 close #2730 --- .changeset/hot-berries-invent.md | 5 +++++ packages/read-modules-dir/src/index.ts | 10 +++++----- packages/supi/test/install/misc.ts | 22 ++++++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 .changeset/hot-berries-invent.md diff --git a/.changeset/hot-berries-invent.md b/.changeset/hot-berries-invent.md new file mode 100644 index 0000000000..e33e7ec362 --- /dev/null +++ b/.changeset/hot-berries-invent.md @@ -0,0 +1,5 @@ +--- +"@pnpm/read-modules-dir": patch +--- + +Ignore files in node_modules. diff --git a/packages/read-modules-dir/src/index.ts b/packages/read-modules-dir/src/index.ts index 1cce4d0b31..d89a746aa5 100644 --- a/packages/read-modules-dir/src/index.ts +++ b/packages/read-modules-dir/src/index.ts @@ -16,18 +16,18 @@ async function _readModulesDir ( ) { let pkgNames: string[] = [] const parentDir = scope ? path.join(modulesDir, scope) : modulesDir - for (const dir of await fs.readdir(parentDir)) { - if (dir[0] === '.') continue + for (const dir of await fs.readdir(parentDir, { withFileTypes: true })) { + if (dir.isFile() || dir.name[0] === '.') continue - if (!scope && dir[0] === '@') { + if (!scope && dir.name[0] === '@') { pkgNames = [ ...pkgNames, - ...await _readModulesDir(modulesDir, dir), + ...await _readModulesDir(modulesDir, dir.name), ] continue } - const pkgName = scope ? `${scope}/${dir}` : dir + const pkgName = scope ? `${scope}/${dir.name}` : dir.name pkgNames.push(pkgName) } return pkgNames diff --git a/packages/supi/test/install/misc.ts b/packages/supi/test/install/misc.ts index 63b8d1a42a..e2a00cd974 100644 --- a/packages/supi/test/install/misc.ts +++ b/packages/supi/test/install/misc.ts @@ -1148,3 +1148,25 @@ test('installing a package that has a manifest with byte order mark (BOM)', asyn await project.has('paralleljs') }) + +test('ignore files in node_modules', async (t: tape.Test) => { + const project = prepareEmpty(t) + const reporter = sinon.spy() + + await fs.mkdir('node_modules') + await fs.writeFile('node_modules/foo', 'x', 'utf8') + + await addDependenciesToPackage( + { + name: 'project', + version: '0.0.0', + }, + ['lodash@4.0.0'], + await testDefaults({ fastUnpack: false, reporter }) + ) + + const m = project.requireModule('lodash') + t.ok(typeof m === 'function', '_ is available') + t.ok(typeof m.clone === 'function', '_.clone is available') + t.equal(await fs.readFile('node_modules/foo', 'utf8'), 'x') +})