Skip to content

Commit a13b2e4

Browse files
authored
Fix the issue of direct/transitive for Npm (#176)
* Fix the issue of direct/transitive for Npm --------- Signed-off-by: Jiyeong Seok <[email protected]>
1 parent 46d363f commit a13b2e4

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ lxml
44
virtualenv
55
pyyaml
66
lastversion
7-
fosslight_util>=1.4.24
7+
fosslight_util>=1.4.29
88
PyGithub
99
requirements-parser
1010
defusedxml

src/fosslight_dependency/package_manager/Npm.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def start_license_checker(self):
4242
tmp_custom_json = 'custom.json'
4343
license_checker_cmd = f'license-checker --excludePrivatePackages --production --json --out {self.input_file_name}'
4444
custom_path_option = ' --customPath '
45-
npm_install_cmd = 'npm install --prod'
45+
npm_install_cmd = 'npm install --omit=dev'
4646

4747
if os.path.isdir(node_modules) != 1:
4848
logger.info("node_modules directory is not existed. So it executes 'npm install'.")
@@ -64,6 +64,8 @@ def start_license_checker(self):
6464
else:
6565
self.append_input_package_list_file(self.input_file_name)
6666

67+
if self.flag_tmp_node_modules:
68+
shutil.rmtree(node_modules, ignore_errors=True)
6769
os.remove(tmp_custom_json)
6870

6971
return ret
@@ -77,13 +79,19 @@ def make_custom_json(self, tmp_custom_json):
7779
def parse_rel_dependencies(self, rel_name, rel_ver, rel_dependencies):
7880
_dependencies = 'dependencies'
7981
_version = 'version'
82+
_peer = 'peerMissing'
8083

8184
for rel_dep_name in rel_dependencies.keys():
8285
# Optional, non-installed dependencies are listed as empty objects
8386
if rel_dependencies[rel_dep_name] == {}:
8487
continue
88+
if _peer in rel_dependencies[rel_dep_name]:
89+
if rel_dependencies[rel_dep_name][_peer]:
90+
continue
8591
if f'{rel_name}({rel_ver})' not in self.relation_tree:
8692
self.relation_tree[f'{rel_name}({rel_ver})'] = []
93+
elif f'{rel_dep_name}({rel_dependencies[rel_dep_name][_version]})' in self.relation_tree[f'{rel_name}({rel_ver})']:
94+
continue
8795
self.relation_tree[f'{rel_name}({rel_ver})'].append(f'{rel_dep_name}({rel_dependencies[rel_dep_name][_version]})')
8896
if _dependencies in rel_dependencies[rel_dep_name]:
8997
self.parse_rel_dependencies(rel_dep_name, rel_dependencies[rel_dep_name][_version],
@@ -94,7 +102,7 @@ def parse_transitive_relationship(self):
94102
_version = 'version'
95103
_name = 'name'
96104

97-
cmd = 'npm ls -a --prod --json -s'
105+
cmd = 'npm ls -a --omit=dev --json -s'
98106
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
99107
rel_tree = result.stdout
100108
if rel_tree is None:
@@ -114,7 +122,15 @@ def parse_transitive_relationship(self):
114122

115123
def parse_direct_dependencies(self):
116124
try:
117-
self.parse_transitive_relationship()
125+
if os.path.isfile(const.SUPPORT_PACKAE.get(self.package_manager_name)):
126+
if not self.flag_tmp_node_modules:
127+
shutil.move(node_modules, f'tmp_fl_{node_modules}')
128+
self.parse_transitive_relationship()
129+
if not self.flag_tmp_node_modules:
130+
shutil.move(f'tmp_fl_{node_modules}', node_modules)
131+
else:
132+
logger.info('Direct/transitive support is not possible because the package.json file does not exist.')
133+
self.direct_dep = False
118134
except Exception as e:
119135
logger.warning(f'Cannot print direct/transitive dependency: {e}')
120136
self.direct_dep = False

0 commit comments

Comments
 (0)