Skip to content

Instantly share code, notes, and snippets.

@nkgentile
Created August 1, 2025 22:00
Show Gist options
  • Select an option

  • Save nkgentile/a833b0de037d33a4c83cfe23f43c37cc to your computer and use it in GitHub Desktop.

Select an option

Save nkgentile/a833b0de037d33a4c83cfe23f43c37cc to your computer and use it in GitHub Desktop.
reset-deps() {
echo "πŸ”Ž Detecting package manager..."
pkg_manager=""
# Step 1: Detect from package.json
if [ -f package.json ]; then
pkg_manager=$(jq -r '.packageManager // empty' package.json 2>/dev/null | cut -d@ -f1)
if [ -n "$pkg_manager" ]; then
echo "πŸ“¦ Detected package manager from package.json β†’ $pkg_manager"
fi
fi
# Step 2: Fallback to lockfile detection
if [ -z "$pkg_manager" ]; then
if [ -f pnpm-lock.yaml ] || [ -f pnpm-workspace.yaml ]; then
pkg_manager="pnpm"
echo "πŸ“¦ Detected package manager from lockfile β†’ pnpm"
elif [ -f yarn.lock ]; then
pkg_manager="yarn"
echo "πŸ“¦ Detected package manager from lockfile β†’ yarn"
elif [ -f package-lock.json ]; then
pkg_manager="npm"
echo "πŸ“¦ Detected package manager from lockfile β†’ npm"
else
pkg_manager="npm"
echo "⚠️ No lockfile or packageManager detected. Defaulting to npm."
fi
fi
# Step 3: Collect node_modules dirs
echo "πŸ” Scanning for node_modules directories..."
node_modules_dirs=()
while IFS= read -r dir; do
node_modules_dirs+=("$dir")
done < <(find . -type d -name node_modules -prune)
# Step 4: Collect lockfiles
lockfiles_to_delete=()
for file in pnpm-lock.yaml yarn.lock package-lock.json; do
if [ -f "$file" ]; then
lockfiles_to_delete+=("$file")
fi
done
# Step 5: Preview actual deletions
echo ""
if [ "${#node_modules_dirs[@]}" -gt 0 ]; then
echo "πŸ“ The following node_modules directories will be deleted:"
for dir in "${node_modules_dirs[@]}"; do echo " - $dir"; done
else
echo "πŸ“ No node_modules directories found."
fi
echo ""
if [ "${#lockfiles_to_delete[@]}" -gt 0 ]; then
echo "🧾 The following lockfiles will be deleted:"
for file in "${lockfiles_to_delete[@]}"; do echo " - $file"; done
else
echo "🧾 No lockfiles found."
fi
echo ""
echo "⚠️ This operation will permanently delete the above directories and files."
echo "Are you sure you want to continue? [y/N] "
read confirm
case "$confirm" in
[yY][eE][sS]|[yY])
echo "βœ… Proceeding with dependency reset..."
;;
*)
echo "❌ Aborted by user."
return 0
;;
esac
# Step 6: Delete node_modules
if [ "${#node_modules_dirs[@]}" -gt 0 ]; then
echo "πŸ—‘οΈ Deleting node_modules directories..."
printf '%s\n' "${node_modules_dirs[@]}" | xargs rm -rf
echo "βœ… node_modules directories deleted."
fi
# Step 7: Delete lockfiles
if [ "${#lockfiles_to_delete[@]}" -gt 0 ]; then
echo "πŸ—‘οΈ Deleting lockfiles..."
rm -f "${lockfiles_to_delete[@]}"
echo "βœ… Lockfiles deleted."
fi
# Step 8: Reinstall dependencies
echo "πŸš€ Installing dependencies with $pkg_manager..."
case "$pkg_manager" in
pnpm)
if pnpm install; then echo "βœ… pnpm install succeeded."; else echo "❌ pnpm install failed."; return 1; fi
;;
yarn)
if yarn install; then echo "βœ… yarn install succeeded."; else echo "❌ yarn install failed."; return 1; fi
;;
npm)
if npm install; then echo "βœ… npm install succeeded."; else echo "❌ npm install failed."; return 1; fi
;;
*)
echo "❌ Unknown package manager '$pkg_manager'. Aborting."
return 1
;;
esac
echo "πŸŽ‰ Dependency tree has been fully reset and reinstalled."
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment