Skip to content

Commit 6343bfb

Browse files
committed
[Refactor] no-extraneous-dependencies improve performance using cache
1 parent 002167e commit 6343bfb

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

src/rules/no-extraneous-dependencies.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from 'path';
22
import fs from 'fs';
3-
import readPkgUp from 'eslint-module-utils/readPkgUp';
3+
import pkgUp from 'eslint-module-utils/pkgUp';
44
import minimatch from 'minimatch';
55
import resolve from 'eslint-module-utils/resolve';
66
import moduleVisitor from 'eslint-module-utils/moduleVisitor';
@@ -30,6 +30,21 @@ function extractDepFields(pkg) {
3030
};
3131
}
3232

33+
function getPackageDepFields(packageJsonPath) {
34+
if (packageJsonPath && !depFieldCache.has(packageJsonPath)) {
35+
let content;
36+
try {
37+
content = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
38+
} catch (err) {
39+
content = {};
40+
}
41+
const depFields = extractDepFields(content);
42+
depFieldCache.set(packageJsonPath, depFields);
43+
}
44+
45+
return depFieldCache.get(packageJsonPath);
46+
}
47+
3348
function getDependencies(context, packageDir) {
3449
let paths = [];
3550
try {
@@ -53,24 +68,21 @@ function getDependencies(context, packageDir) {
5368
// use rule config to find package.json
5469
paths.forEach(dir => {
5570
const packageJsonPath = path.join(dir, 'package.json');
56-
if (!depFieldCache.has(packageJsonPath)) {
57-
const depFields = extractDepFields(
58-
JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')),
59-
);
60-
depFieldCache.set(packageJsonPath, depFields);
61-
}
62-
const _packageContent = depFieldCache.get(packageJsonPath);
71+
const _packageContent = getPackageDepFields(packageJsonPath) || {};
6372
Object.keys(packageContent).forEach(depsKey =>
6473
Object.assign(packageContent[depsKey], _packageContent[depsKey]),
6574
);
6675
});
6776
} else {
77+
const packageJsonPath = pkgUp({
78+
cwd: context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(),
79+
normalize: false,
80+
});
81+
6882
// use closest package.json
6983
Object.assign(
7084
packageContent,
71-
extractDepFields(
72-
readPkgUp({ cwd: context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(), normalize: false }).pkg,
73-
),
85+
getPackageDepFields(packageJsonPath),
7486
);
7587
}
7688

0 commit comments

Comments
 (0)