diff --git a/compile_dev.sh b/compile_dev.sh index bd0d930..29e8223 100755 --- a/compile_dev.sh +++ b/compile_dev.sh @@ -16,15 +16,36 @@ current_branch=$(git rev-parse --abbrev-ref HEAD) # 指定并加载环境变量文件(dev 使用 .env.development) ENV_FILE=".env.development" -if [ -f "$ENV_FILE" ]; then - echo "Loading environment from $ENV_FILE" | tee -a $LOGFILE - set -a - # shellcheck disable=SC1090 - source "$ENV_FILE" - set +a -else - echo "未找到 $ENV_FILE,继续使用当前环境变量" | tee -a $LOGFILE -fi + +# 兼容 KEY=VALUE 与 KEY: VALUE 的 .env 行为,忽略注释与空行 +load_env_file() { + local file="$1" + if [ -f "$file" ]; then + echo "Loading environment from $file" | tee -a $LOGFILE + while IFS= read -r raw || [ -n "$raw" ]; do + # 去除注释与首尾空白 + local line="${raw%%#*}" + line="$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" + [ -z "$line" ] && continue + + # 将 KEY: VALUE 转换为 KEY=VALUE + if echo "$line" | grep -q '^[A-Za-z_][A-Za-z0-9_]*[[:space:]]*:'; then + line="$(echo "$line" | sed -E 's/^([A-Za-z_][A-Za-z0-9_]*)[[:space:]]*:[[:space:]]*/\1=/')" + fi + + # 仅处理合法的 KEY=VALUE 形式 + if echo "$line" | grep -q '^[A-Za-z_][A-Za-z0-9_]*='; then + # 去除等号两侧空白 + line="$(echo "$line" | sed -E 's/^[[:space:]]*//; s/[[:space:]]*$//; s/[[:space:]]*=[[:space:]]*/=/')" + export $line + fi + done < "$file" + else + echo "未找到 $file,继续使用当前环境变量" | tee -a $LOGFILE + fi +} + +load_env_file "$ENV_FILE" # 设置 NODE_ENV 为 development,避免默认使用 production export NODE_ENV="development" diff --git a/compile_prod.sh b/compile_prod.sh index 9c947d6..a986b29 100755 --- a/compile_prod.sh +++ b/compile_prod.sh @@ -16,15 +16,36 @@ current_branch=$(git rev-parse --abbrev-ref HEAD) # 指定并加载环境变量文件(prod 使用 .env.production) ENV_FILE=".env.production" -if [ -f "$ENV_FILE" ]; then - echo "Loading environment from $ENV_FILE" | tee -a $LOGFILE - set -a - # shellcheck disable=SC1090 - source "$ENV_FILE" - set +a -else - echo "未找到 $ENV_FILE,继续使用当前环境变量" | tee -a $LOGFILE -fi + +# 兼容 KEY=VALUE 与 KEY: VALUE 的 .env 行为,忽略注释与空行 +load_env_file() { + local file="$1" + if [ -f "$file" ]; then + echo "Loading environment from $file" | tee -a $LOGFILE + while IFS= read -r raw || [ -n "$raw" ]; do + # 去除注释与首尾空白 + local line="${raw%%#*}" + line="$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" + [ -z "$line" ] && continue + + # 将 KEY: VALUE 转换为 KEY=VALUE + if echo "$line" | grep -q '^[A-Za-z_][A-Za-z0-9_]*[[:space:]]*:'; then + line="$(echo "$line" | sed -E 's/^([A-Za-z_][A-Za-z0-9_]*)[[:space:]]*:[[:space:]]*/\1=/')" + fi + + # 仅处理合法的 KEY=VALUE 形式 + if echo "$line" | grep -q '^[A-Za-z_][A-Za-z0-9_]*='; then + # 去除等号两侧空白 + line="$(echo "$line" | sed -E 's/^[[:space:]]*//; s/[[:space:]]*$//; s/[[:space:]]*=[[:space:]]*/=/')" + export $line + fi + done < "$file" + else + echo "未找到 $file,继续使用当前环境变量" | tee -a $LOGFILE + fi +} + +load_env_file "$ENV_FILE" # 设置 NODE_ENV 为 production export NODE_ENV="production"