feat: add Flutter web build support
This commit is contained in:
90
scripts/build-apps.sh
Normal file
90
scripts/build-apps.sh
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
OUTPUT_ROOT="${PROJECT_ROOT}/output/apps"
|
||||
TARGET="${1:-all}"
|
||||
PLATFORM="${2:-all}"
|
||||
|
||||
require_command() {
|
||||
local command_name="$1"
|
||||
if ! command -v "${command_name}" >/dev/null 2>&1; then
|
||||
echo "缺少命令:${command_name}" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
require_value() {
|
||||
local value_name="$1"
|
||||
local value="${!value_name:-}"
|
||||
if [[ -z "${value}" ]]; then
|
||||
echo "缺少环境变量:${value_name}" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
copy_output() {
|
||||
local source="$1"
|
||||
local target="$2"
|
||||
if [[ "${target}" != "${OUTPUT_ROOT}/"* ]]; then
|
||||
echo "拒绝清理非预期输出目录:${target}" >&2
|
||||
exit 1
|
||||
fi
|
||||
rm -rf "${target}"
|
||||
mkdir -p "${target}"
|
||||
cp -R "${source}/." "${target}/"
|
||||
}
|
||||
|
||||
build_app() {
|
||||
local app_name="$1"
|
||||
local app_dir="${PROJECT_ROOT}/apps/${app_name}"
|
||||
local app_output="${OUTPUT_ROOT}/${app_name}"
|
||||
|
||||
echo "开始构建:${app_name}"
|
||||
(
|
||||
cd "${app_dir}"
|
||||
flutter pub get
|
||||
flutter analyze
|
||||
flutter test
|
||||
|
||||
if [[ "${PLATFORM}" == "all" || "${PLATFORM}" == "android" ]]; then
|
||||
flutter build apk --release --no-pub --dart-define="API_BASE_URL=${API_BASE_URL}"
|
||||
mkdir -p "${app_output}"
|
||||
cp "build/app/outputs/flutter-apk/app-release.apk" "${app_output}/${app_name}-release.apk"
|
||||
fi
|
||||
|
||||
if [[ "${PLATFORM}" == "all" || "${PLATFORM}" == "web" ]]; then
|
||||
flutter build web --release --no-pub --dart-define="API_BASE_URL=${API_BASE_URL}"
|
||||
copy_output "${app_dir}/build/web" "${app_output}/web"
|
||||
fi
|
||||
)
|
||||
echo "构建完成:${app_name}"
|
||||
}
|
||||
|
||||
if [[ "${TARGET}" != "all" && "${TARGET}" != "user_app" && "${TARGET}" != "service_app" ]]; then
|
||||
echo "应用参数只能是 all、user_app 或 service_app。" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ "${PLATFORM}" != "all" && "${PLATFORM}" != "android" && "${PLATFORM}" != "web" ]]; then
|
||||
echo "平台参数只能是 all、android 或 web。" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
require_command flutter
|
||||
require_value API_BASE_URL
|
||||
|
||||
if [[ "${PLATFORM}" == "all" || "${PLATFORM}" == "web" ]]; then
|
||||
flutter config --enable-web
|
||||
fi
|
||||
|
||||
mkdir -p "${OUTPUT_ROOT}"
|
||||
if [[ "${TARGET}" == "all" || "${TARGET}" == "user_app" ]]; then
|
||||
build_app user_app
|
||||
fi
|
||||
if [[ "${TARGET}" == "all" || "${TARGET}" == "service_app" ]]; then
|
||||
build_app service_app
|
||||
fi
|
||||
|
||||
echo "产物目录:${OUTPUT_ROOT}"
|
||||
Reference in New Issue
Block a user