Skip to content

Commit 6c9cc3e

Browse files
fix(check_peer_dependencies): use node module resolution to find dependencies
No longer assumes that all packages are installed flat in the root node_modules Use 'resolve' npm module to discover dependencies' package.json
1 parent 42114d4 commit 6c9cc3e

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed

check_peer_dependencies.js

+28-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#!/usr/bin/env node
2-
32
const fs = require('fs');
3+
const path = require('path');
44
const semver = require('semver');
55
const util = require('./util');
6+
const resolve = require('resolve');
67
const yargs = require('yargs')
78
.option('help', {
89
alias: 'h',
@@ -43,7 +44,7 @@ const visitedDeps = [];
4344
const peerDeps = [];
4445

4546
const rootPackageJson = readFile(PACKAGEJSON);
46-
checkInstalledPackage(rootPackageJson);
47+
checkInstalledPackage(".", null);
4748

4849
function getDependencies(packageJson) {
4950
const { name, dependencies = {}, peerDependencies = {} } = packageJson;
@@ -54,8 +55,31 @@ function getDependencies(packageJson) {
5455
};
5556
}
5657

58+
function getPackagePath(basedir, packageName) {
59+
let packagePath;
60+
function packageFilter (pkg, pkgfile, dir) {
61+
packagePath = pkgfile;
62+
return pkg;
63+
}
64+
try {
65+
resolve.sync(packageName, { basedir, packageFilter });
66+
} catch (ignored) {
67+
// resolve.sync throws if no main: is present
68+
// Some packages (such as @types/*) do not have a main
69+
// As long as we have a packagePath, it's fine
70+
}
71+
return packagePath;
72+
}
73+
74+
function checkInstalledPackage(basedir, packageName) {
75+
if (resolve.isCore(packageName)) {
76+
return;
77+
}
78+
79+
const packagePath = packageName ? getPackagePath(basedir, packageName) : basedir;
80+
const packageJsonPath = path.join(packagePath, PACKAGEJSON);
81+
const packageJson = readFile(packageJsonPath);
5782

58-
function checkInstalledPackage(packageJson) {
5983
const { name, dependencies, peerDependencies } = getDependencies(packageJson);
6084
if (visitedDeps.includes(name)) {
6185
return;
@@ -67,11 +91,7 @@ function checkInstalledPackage(packageJson) {
6791
});
6892

6993
dependencies.forEach(dependency => {
70-
const dependencyName = dependency.name;
71-
const installedPkgDir = `${NODEMODULES}/${dependencyName}`;
72-
const nestedPkgJson = `${installedPkgDir}/${PACKAGEJSON}`;
73-
const nestedPkg = readFile(nestedPkgJson);
74-
checkInstalledPackage(nestedPkg)
94+
checkInstalledPackage(packagePath, dependency.name)
7595
});
7696
}
7797

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"util": "./util.js"
3131
},
3232
"dependencies": {
33+
"@types/resolve": "0.0.8",
3334
"conventional-changelog": "^3.1.10",
3435
"conventional-changelog-ui-router-core": "^1.4.2",
3536
"find-parent-dir": "^0.3.0",
@@ -39,6 +40,7 @@
3940
"npm-run-all": "^4.1.5",
4041
"open": "^6.4.0",
4142
"readline-sync": "^1.4.10",
43+
"resolve": "^1.12.0",
4244
"shelljs": "^0.8.3",
4345
"shx": "^0.3.1",
4446
"tmp": "^0.1.0",

yarn.lock

+24
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@
66
version "3.0.3"
77
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
88

9+
"@types/node@*":
10+
version "12.7.12"
11+
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.12.tgz#7c6c571cc2f3f3ac4a59a5f2bd48f5bdbc8653cc"
12+
integrity sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==
13+
14+
15+
version "0.0.8"
16+
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194"
17+
integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==
18+
dependencies:
19+
"@types/node" "*"
20+
921
JSONStream@^1.0.4:
1022
version "1.3.3"
1123
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.3.tgz#27b4b8fbbfeab4e71bcf551e7f27be8d952239bf"
@@ -1116,6 +1128,11 @@ path-parse@^1.0.5:
11161128
version "1.0.5"
11171129
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
11181130

1131+
path-parse@^1.0.6:
1132+
version "1.0.6"
1133+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
1134+
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
1135+
11191136
path-type@^1.0.0:
11201137
version "1.1.0"
11211138
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
@@ -1296,6 +1313,13 @@ resolve@^1.1.6:
12961313
dependencies:
12971314
path-parse "^1.0.5"
12981315

1316+
resolve@^1.12.0:
1317+
version "1.12.0"
1318+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
1319+
integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
1320+
dependencies:
1321+
path-parse "^1.0.6"
1322+
12991323
rimraf@^2.6.3:
13001324
version "2.7.1"
13011325
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"

0 commit comments

Comments
 (0)