1
1
#!/usr/bin/env node
2
-
3
2
const fs = require ( 'fs' ) ;
3
+ const path = require ( 'path' ) ;
4
4
const semver = require ( 'semver' ) ;
5
5
const util = require ( './util' ) ;
6
+ const resolve = require ( 'resolve' ) ;
6
7
const yargs = require ( 'yargs' )
7
8
. option ( 'help' , {
8
9
alias : 'h' ,
@@ -43,7 +44,7 @@ const visitedDeps = [];
43
44
const peerDeps = [ ] ;
44
45
45
46
const rootPackageJson = readFile ( PACKAGEJSON ) ;
46
- checkInstalledPackage ( rootPackageJson ) ;
47
+ checkInstalledPackage ( "." , null ) ;
47
48
48
49
function getDependencies ( packageJson ) {
49
50
const { name, dependencies = { } , peerDependencies = { } } = packageJson ;
@@ -54,8 +55,31 @@ function getDependencies(packageJson) {
54
55
} ;
55
56
}
56
57
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 ) ;
57
82
58
- function checkInstalledPackage ( packageJson ) {
59
83
const { name, dependencies, peerDependencies } = getDependencies ( packageJson ) ;
60
84
if ( visitedDeps . includes ( name ) ) {
61
85
return ;
@@ -67,11 +91,7 @@ function checkInstalledPackage(packageJson) {
67
91
} ) ;
68
92
69
93
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 )
75
95
} ) ;
76
96
}
77
97
0 commit comments