#!/usr/bin/env bash set -euo pipefail project_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # Node 必须在进程启动前收到代理开关和额外 CA,放在 .env.local 中太晚。 if ! node -e 'process.exit(process.allowedNodeEnvironmentFlags.has("--use-env-proxy") ? 0 : 1)'; then echo "[charles] 当前 $(node --version) 不支持原生环境代理,请先执行 nvm use 24(需要 Node >= 24.5 或 22.21)。" >&2 exit 1 fi export NODE_EXTRA_CA_CERTS="${NODE_EXTRA_CA_CERTS:-$HOME/.charles-ca.pem}" if [[ ! -r "$NODE_EXTRA_CA_CERTS" ]]; then echo "[charles] 找不到可读的根证书:$NODE_EXTRA_CA_CERTS" >&2 echo "请在 Charles 的 Help → SSL Proxying → Save Charles Root Certificate 中导出 PEM,或通过 NODE_EXTRA_CA_CERTS 指定路径。" >&2 exit 1 fi export NODE_USE_ENV_PROXY=1 export HTTP_PROXY="${CHARLES_PROXY_URL:-http://127.0.0.1:8888}" export HTTPS_PROXY="$HTTP_PROXY" export NO_PROXY="localhost,127.0.0.1,::1${NO_PROXY:+,$NO_PROXY}${no_proxy:+,$no_proxy}" # 统一大小写变量,避免命中其他已导出的代理。 export http_proxy="$HTTP_PROXY" export https_proxy="$HTTPS_PROXY" export no_proxy="$NO_PROXY" cd "$project_root" echo "[charles] 已启用 Node 环境代理,请确认 Charles 已启动并开启目标域名的 SSL Proxying。" # 复用普通开发入口,保留环境配置、客户端/模板编译和默认端口。 exec node --import tsx "$project_root/scripts/next-env.ts" development dev "$@"