diff --git a/README.md b/README.md
index fdf4dc23..5fe080f7 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ In this user guide, you can see how to install the FOSSLight Dependency Scanner
- | Javascript |
+ Javascript |
Npm |
package.json |
O |
@@ -44,6 +44,13 @@ In this user guide, you can see how to install the FOSSLight Dependency Scanner
O |
O |
O |
+
+
+ | Yarn |
+ package.json |
+ O |
+ O |
+ O |
| Java |
diff --git a/src/fosslight_dependency/_analyze_dependency.py b/src/fosslight_dependency/_analyze_dependency.py
index c1cafdec..64bd1028 100644
--- a/src/fosslight_dependency/_analyze_dependency.py
+++ b/src/fosslight_dependency/_analyze_dependency.py
@@ -35,7 +35,7 @@ def analyze_dependency(package_manager_name, input_dir, output_dir, pip_activate
if package_manager_name == const.PYPI:
package_manager = Pypi(input_dir, output_dir, pip_activate_cmd, pip_deactivate_cmd)
- elif package_manager_name == const.NPM:
+ elif package_manager_name == const.NPM or package_manager_name == const.YARN:
package_manager = Npm(input_dir, output_dir)
elif package_manager_name == const.MAVEN:
package_manager = Maven(input_dir, output_dir, output_custom_dir)
diff --git a/src/fosslight_dependency/_help.py b/src/fosslight_dependency/_help.py
index 6ec2f789..37e9fc33 100644
--- a/src/fosslight_dependency/_help.py
+++ b/src/fosslight_dependency/_help.py
@@ -16,6 +16,7 @@
Maven (Java)
NPM (Node.js)
PNPM (Node.js)
+ Yarn (Node.js)
PIP (Python)
Pub (Dart with flutter)
Cocoapods (Swift/Obj-C)
@@ -33,7 +34,7 @@
-v\t\t\t\t Print the version of the script.
-m \t Enter the package manager.
\t(npm, maven, gradle, pypi, pub, cocoapods, android, swift, carthage,
- \t go, nuget, helm, unity, cargo, pnpm)
+ \t go, nuget, helm, unity, cargo, pnpm, yarn)
-p \t\t Enter the path where the script will be run.
-e \t\t Enter the path where the analysis will not be performed.
-o \t\t Output path
diff --git a/src/fosslight_dependency/constant.py b/src/fosslight_dependency/constant.py
index ede861b5..e0e1b1b4 100644
--- a/src/fosslight_dependency/constant.py
+++ b/src/fosslight_dependency/constant.py
@@ -25,6 +25,7 @@
UNITY = 'unity'
CARGO = 'cargo'
PNPM = 'pnpm'
+YARN = 'yarn'
# Supported package name and manifest file
SUPPORT_PACKAE = {
diff --git a/src/fosslight_dependency/package_manager/Npm.py b/src/fosslight_dependency/package_manager/Npm.py
index 8e33214f..60b60a60 100644
--- a/src/fosslight_dependency/package_manager/Npm.py
+++ b/src/fosslight_dependency/package_manager/Npm.py
@@ -53,8 +53,14 @@ def start_license_checker(self):
self.flag_tmp_node_modules = True
cmd_ret = subprocess.call(npm_install_cmd, shell=True)
if cmd_ret != 0:
- logger.error(f"{npm_install_cmd} returns an error")
- return False
+ logger.warning(f"{npm_install_cmd} returns an error. Trying yarn as fallback...")
+ yarn_install_cmd = 'yarn install --production --ignore-scripts'
+ cmd_ret = subprocess.call(yarn_install_cmd, shell=True)
+ if cmd_ret != 0:
+ logger.error(f"Both {npm_install_cmd} and {yarn_install_cmd} failed")
+ return False
+ else:
+ logger.info(f"Successfully executed {yarn_install_cmd}")
# customized json file for obtaining specific items with license-checker
self.make_custom_json(self.tmp_custom_json)
diff --git a/src/fosslight_dependency/run_dependency_scanner.py b/src/fosslight_dependency/run_dependency_scanner.py
index 028791d7..762bedd7 100755
--- a/src/fosslight_dependency/run_dependency_scanner.py
+++ b/src/fosslight_dependency/run_dependency_scanner.py
@@ -207,6 +207,9 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
autodetect = True
found_package_manager = {}
if package_manager:
+ scan_item.set_cover_comment(f"Manual detect mode (-m {package_manager})")
+ if package_manager == const.YARN:
+ package_manager = const.NPM
autodetect = False
support_packagemanager = list(const.SUPPORT_PACKAE.keys())
@@ -221,7 +224,6 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
manifest_file_name.extend(value)
else:
manifest_file_name.append(value)
- scan_item.set_cover_comment(f"Manual detect mode (-m {package_manager})")
else:
manifest_file_name = []