diff --git a/src/rules/no-extraneous-dependencies.js b/src/rules/no-extraneous-dependencies.js index b54ee28bb7..99973e7e70 100644 --- a/src/rules/no-extraneous-dependencies.js +++ b/src/rules/no-extraneous-dependencies.js @@ -1,6 +1,6 @@ import path from 'path'; import fs from 'fs'; -import readPkgUp from 'eslint-module-utils/readPkgUp'; +import pkgUp from 'eslint-module-utils/pkgUp'; import minimatch from 'minimatch'; import resolve from 'eslint-module-utils/resolve'; import moduleVisitor from 'eslint-module-utils/moduleVisitor'; @@ -30,6 +30,17 @@ function extractDepFields(pkg) { }; } +function getPackageDepFields(packageJsonPath) { + if (!depFieldCache.has(packageJsonPath)) { + const depFields = extractDepFields( + JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')), + ); + depFieldCache.set(packageJsonPath, depFields); + } + + return depFieldCache.get(packageJsonPath); +} + function getDependencies(context, packageDir) { let paths = []; try { @@ -53,24 +64,21 @@ function getDependencies(context, packageDir) { // use rule config to find package.json paths.forEach(dir => { const packageJsonPath = path.join(dir, 'package.json'); - if (!depFieldCache.has(packageJsonPath)) { - const depFields = extractDepFields( - JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')), - ); - depFieldCache.set(packageJsonPath, depFields); - } - const _packageContent = depFieldCache.get(packageJsonPath); + const _packageContent = getPackageDepFields(packageJsonPath); Object.keys(packageContent).forEach(depsKey => Object.assign(packageContent[depsKey], _packageContent[depsKey]), ); }); } else { + const packageJsonPath = pkgUp({ + cwd: context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(), + normalize: false, + }); + // use closest package.json Object.assign( packageContent, - extractDepFields( - readPkgUp({ cwd: context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(), normalize: false }).pkg, - ), + getPackageDepFields(packageJsonPath), ); }