96 lines
2.8 KiB
Bash
Executable File
96 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# 新机器环境初始化(只需执行一次)
|
||
#
|
||
# 用法:在项目根目录执行
|
||
# bash scripts/setup.sh
|
||
#
|
||
# 完成后重启终端(或 source ~/.zshrc)使 PATH 全局生效。
|
||
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
PUB_CACHE_BIN="$HOME/.pub-cache/bin"
|
||
|
||
# 前置检查:Flutter SDK 必须已安装
|
||
if ! command -v dart &> /dev/null; then
|
||
echo "Error: dart not found."
|
||
echo "Please install Flutter SDK first: https://docs.flutter.dev/get-started/install"
|
||
exit 1
|
||
fi
|
||
if ! command -v flutter &> /dev/null; then
|
||
echo "Error: flutter not found."
|
||
echo "Please install Flutter SDK first: https://docs.flutter.dev/get-started/install"
|
||
exit 1
|
||
fi
|
||
|
||
echo "=== customer-im-client 环境初始化 ==="
|
||
echo ""
|
||
|
||
# ---- Step 1: 安装全局工具 ----
|
||
echo "[1/6] 安装全局工具 (melos + mason_cli)..."
|
||
dart pub global activate melos
|
||
dart pub global activate mason_cli
|
||
echo ""
|
||
|
||
# ---- Step 2: 配置 PATH ----
|
||
echo "[2/6] 配置 PATH..."
|
||
if [[ "$SHELL" == */zsh ]]; then
|
||
SHELL_CONFIG="$HOME/.zshrc"
|
||
elif [[ "$SHELL" == */bash ]]; then
|
||
SHELL_CONFIG="$HOME/.bash_profile"
|
||
else
|
||
SHELL_CONFIG="$HOME/.profile"
|
||
fi
|
||
|
||
PATH_LINE='export PATH="$PATH":"$HOME/.pub-cache/bin"'
|
||
if ! grep -qF ".pub-cache/bin" "$SHELL_CONFIG" 2>/dev/null; then
|
||
echo "$PATH_LINE" >> "$SHELL_CONFIG"
|
||
echo " 写入 PATH 到 $SHELL_CONFIG"
|
||
else
|
||
echo " PATH 已配置,跳过"
|
||
fi
|
||
export PATH="$PATH:$PUB_CACHE_BIN" # 当前 session 立即生效
|
||
echo ""
|
||
|
||
# ---- Step 3: 安装项目依赖 ----
|
||
echo "[3/6] dart pub get..."
|
||
cd "$ROOT_DIR" && dart pub get
|
||
echo ""
|
||
|
||
# ---- Step 4: IDE 模块配置生成 ----
|
||
# 生成 .iml 和 .idea/modules.xml,IDE 靠这些文件识别各个包并显示 [melos_xxx] 标签。
|
||
# 这些文件在 .gitignore 中不入库,每台机器需要本地生成。
|
||
# 已有环境缺失标签时,单独执行 melos bootstrap 即可补全,无需重跑整个 setup。
|
||
echo "[4/6] melos bootstrap (生成 .iml + modules.xml)..."
|
||
cd "$ROOT_DIR" && "$PUB_CACHE_BIN/melos" bootstrap
|
||
echo ""
|
||
|
||
# ---- Step 4.5: 清理旧的 mason 缓存 ----
|
||
if [ -d "$ROOT_DIR/.mason" ]; then
|
||
echo " 清理旧 .mason 目录..."
|
||
rm -rf "$ROOT_DIR/.mason"
|
||
fi
|
||
|
||
if [ -f "$ROOT_DIR/mason-lock.json" ]; then
|
||
echo " 清理旧 mason-lock.json..."
|
||
rm -f "$ROOT_DIR/mason-lock.json"
|
||
fi
|
||
|
||
# ---- Step 5: 注册 mason bricks ----
|
||
echo "[5/6] mason get (注册本地 bricks)..."
|
||
cd "$ROOT_DIR" && "$PUB_CACHE_BIN/mason" get
|
||
echo ""
|
||
|
||
# ---- Step 6: 首次代码生成 ----
|
||
echo "[6/6] melos run gen (首次代码生成)..."
|
||
cd "$ROOT_DIR" && "$PUB_CACHE_BIN/melos" run gen
|
||
echo ""
|
||
|
||
# ---- 验证 ----
|
||
echo "=== 验证 ==="
|
||
echo -n "melos : " && "$PUB_CACHE_BIN/melos" --version
|
||
echo -n "mason : " && "$PUB_CACHE_BIN/mason" --version
|
||
echo ""
|
||
echo "=== 完成!重启终端(或执行 source ${SHELL_CONFIG})使 PATH 全局生效 ==="
|