Created
August 1, 2025 22:00
-
-
Save nkgentile/a833b0de037d33a4c83cfe23f43c37cc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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