#!/bin/sh # start-dev.sh — robust on QNAP/Container Station set -e # ===== 1) ENV defaults (ดีต่อ NFS/QNAP) ===== : "${PORT:=3001}" : "${CHOKIDAR_USEPOLLING:=1}" : "${CHOKIDAR_INTERVAL:=300}" : "${WATCHPACK_POLLING:=true}" export PORT CHOKIDAR_USEPOLLING CHOKIDAR_INTERVAL WATCHPACK_POLLING # ===== 2) ใช้ deps ที่ bake ไว้ถ้ามี (/opt/runtime/node_modules) ===== BAKED="/opt/runtime/node_modules" if [ -d "$BAKED" ]; then # พยายามชี้ /app/node_modules → /opt/runtime/node_modules (ครั้งเดียวพอ) if [ ! -L /app/node_modules ]; then if [ ! -e /app/node_modules ] || [ -z "$(ls -A /app/node_modules 2>/dev/null)" ]; then mkdir -p /app 2>/dev/null || true # สำคัญ: ชี้ที่ /app/node_modules ตรง ๆ (ไม่ใช่ node_modules/node_modules) ln -sfn "$BAKED" /app/node_modules 2>/dev/null || true fi fi # ถึงจะ symlink ไม่ได้ เราก็ยัง resolve ได้ผ่าน PATH/NODE_PATH export PATH="$BAKED/.bin:$PATH" export NODE_PATH="$BAKED${NODE_PATH:+:$NODE_PATH}" fi # ===== 3) ให้แน่ใจว่า /app/node_modules มีอยู่ และพยายาม set owner (best-effort) ===== mkdir -p /app/node_modules 2>/dev/null || true chown -R "$(id -u)":"$(id -g)" /app/node_modules 2>/dev/null || true # ===== 4) ถ้าไม่มี nodemon เลย → ติดตั้ง dev deps แบบ fallback ===== if ! command -v nodemon >/dev/null 2>&1 && [ ! -x /app/node_modules/.bin/nodemon ]; then echo "[start-dev] nodemon not found; installing dev deps locally..." npm ci || npm install fi # ===== 5) Start dev server (inspect เปิดไว้บน 9229) ===== echo "[start-dev] Starting dev server (inspect 0.0.0.0:9229, PORT=$PORT)" NODEMON_BIN="$(command -v nodemon || echo npx nodemon)" exec sh -lc "$NODEMON_BIN --legacy-watch --watch src --ext js,json,ts --exec 'node --enable-source-maps src/index.js' --inspect=0.0.0.0:9229"