TOOL: pnpm reset

Sometimes you need a reset.

Especially with npm/pnpm.

This script will do that.

#!/bin/bash

set -euo pipefail

# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

timestamp() {
  date +"%Y-%m-%d %H:%M:%S"
}

log_success() {
  echo -e "${GREEN}[$(timestamp)] ✅ $1${NC}"
}

log_error() {
  echo -e "${RED}[$(timestamp)] ❌ $1${NC}"
}

log_step() {
  echo -e "${YELLOW}[$(timestamp)] ➡️  $1${NC}"
}

# Check dependencies
command -v pnpm >/dev/null 2>&1 || { log_error "pnpm is not installed. Aborting."; exit 1; }
command -v node >/dev/null 2>&1 || { log_error "node is not installed. Aborting."; exit 1; }

# Flags
SKIP_HOOKS=false
NO_BUILD=false

for arg in "$@"; do
  case $arg in
    --skip-hooks) SKIP_HOOKS=true ;;
    --no-build) NO_BUILD=true ;;
    *) ;;
  esac
done

clear

log_step "🔧 Starting pnpm purge and rebuild..."

log_step "🖥  Stopping servers..."

echo "🛑 Attempting to stop Next.js dev server..."

SELF_PID=$$
PIDS=$(pgrep -f "next dev" | grep -v "$SELF_PID")

echo "🛑 Attempting to stop Next.js development server (pnpm dev)..."
pkill -f "pnpm dev" &> /dev/null
echo "🛑 Stop command issued for 'pnpm dev' process."

if [ -z "$PIDS" ]; then
  echo "✅ No running Next.js dev processes found."; echo ""
  exit 0
fi

echo "📋 Processes to be stopped:"; echo ""
ps -fp $PIDS

# Kill the processes
echo "$PIDS" | xargs kill; echo ""

# Wait and re-check
sleep 1
if pgrep -f "next dev" > /dev/null; then
  echo "❌ Some processes are still running. Trying kill -9..."
  echo "$PIDS" | xargs kill -9; echo ""
else
  echo "✅ Successfully stopped all Next.js dev processes."; echo ""
fi

# Backup step
log_step "📦 Backing up package.json and lock file..."
cp package.json package.json.bak 2>/dev/null || true
cp pnpm-lock.yaml pnpm-lock.yaml.bak 2>/dev/null || true
log_success "Backup created."

log_step "🧹 Removing .next directory..."
rm -rf .next && log_success ".next directory removed."

log_step "🧹 Removing node_modules directory..."
rm -rf node_modules && log_success "node_modules removed."

log_step "🔍 Checking for outdated packages..."
pnpm outdated || log_error "Some packages are outdated."
echo -e "${YELLOW}[*] To upgrade, run: npx npm-check-updates -u && pnpm install${NC}"

read -r -p "[?] Continue with current versions? (press enter to proceed)"

log_step "🧾 Removing pnpm-lock.yaml..."
rm -f pnpm-lock.yaml && log_success "Lock file removed."

log_step "🧽 Pruning PNPM store..."
pnpm store prune && log_success "Store pruned."

log_step "📥 Installing dependencies..."
pnpm install && log_success "Dependencies installed."

if [ "$SKIP_HOOKS" = false ]; then
  if [ -f scripts/setup-hook.mjs ]; then
    log_step "🪝 Setting up pre-commit hooks..."
    node scripts/setup-hook.mjs && log_success "Pre-commit hook set up."
  else
    log_error "Hook script not found. Skipping."
  fi
fi

if [ "$NO_BUILD" = false ]; then
  log_step "🏗  Building the project..."
  pnpm build && log_success "Project built."
else
  log_step "🛑 Build skipped by --no-build"
fi

log_success "🎉 All steps completed successfully."
1 Like