42 lines
2.0 KiB
Bash
42 lines
2.0 KiB
Bash
#!/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"
|