Initial commit mit MkDocs-Dokumentation
This commit is contained in:
157
start.sh
Executable file
157
start.sh
Executable file
@@ -0,0 +1,157 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$ROOT_DIR"
|
||||
USE_NODE20_NPX=0
|
||||
|
||||
normalize_semver() {
|
||||
local version="$1"
|
||||
echo "${version#v}" | sed -E 's/[^0-9.].*$//'
|
||||
}
|
||||
|
||||
version_gte() {
|
||||
local current required
|
||||
local c_major c_minor c_patch r_major r_minor r_patch
|
||||
|
||||
current=$(normalize_semver "$1")
|
||||
required=$(normalize_semver "$2")
|
||||
|
||||
IFS='.' read -r c_major c_minor c_patch <<< "$current"
|
||||
IFS='.' read -r r_major r_minor r_patch <<< "$required"
|
||||
|
||||
c_major=${c_major:-0}
|
||||
c_minor=${c_minor:-0}
|
||||
c_patch=${c_patch:-0}
|
||||
r_major=${r_major:-0}
|
||||
r_minor=${r_minor:-0}
|
||||
r_patch=${r_patch:-0}
|
||||
|
||||
if (( c_major > r_major )); then return 0; fi
|
||||
if (( c_major < r_major )); then return 1; fi
|
||||
if (( c_minor > r_minor )); then return 0; fi
|
||||
if (( c_minor < r_minor )); then return 1; fi
|
||||
if (( c_patch >= r_patch )); then return 0; fi
|
||||
return 1
|
||||
}
|
||||
|
||||
load_nvm_if_available() {
|
||||
if command -v nvm >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
|
||||
if [[ -s "$NVM_DIR/nvm.sh" ]]; then
|
||||
# shellcheck source=/dev/null
|
||||
. "$NVM_DIR/nvm.sh" >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
command -v nvm >/dev/null 2>&1
|
||||
}
|
||||
|
||||
try_use_project_node() {
|
||||
local project_root="$1"
|
||||
local required_version="$2"
|
||||
local current_version
|
||||
|
||||
current_version=$(node -v 2>/dev/null || true)
|
||||
if [[ -n "$current_version" ]] && version_gte "$current_version" "$required_version"; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! load_nvm_if_available; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
pushd "$project_root" >/dev/null
|
||||
if [[ -f ".nvmrc" ]]; then
|
||||
nvm use --silent >/dev/null 2>&1 || true
|
||||
fi
|
||||
popd >/dev/null
|
||||
|
||||
current_version=$(node -v 2>/dev/null || true)
|
||||
if [[ -n "$current_version" ]] && version_gte "$current_version" "$required_version"; then
|
||||
echo "Projekt-Node aktiviert: ${current_version}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
ensure_minimum_node_version() {
|
||||
local project_root="$1"
|
||||
local min_version="20.19.0"
|
||||
local current_version
|
||||
local switched=0
|
||||
|
||||
if ! command -v node >/dev/null 2>&1; then
|
||||
echo "Node.js wurde nicht gefunden. Bitte Node.js >= ${min_version} installieren."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if try_use_project_node "$project_root" "$min_version"; then
|
||||
switched=1
|
||||
fi
|
||||
|
||||
current_version=$(node -v 2>/dev/null || true)
|
||||
if [[ -z "$current_version" ]]; then
|
||||
echo "Konnte die Node.js-Version nicht ermitteln."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! version_gte "$current_version" "$min_version"; then
|
||||
if (( switched == 0 )) && load_nvm_if_available; then
|
||||
echo "Node.js ${current_version} erkannt. Versuche automatische Aktivierung von ${min_version} via nvm ..."
|
||||
nvm install "${min_version}" >/dev/null
|
||||
nvm use "${min_version}" >/dev/null
|
||||
current_version=$(node -v 2>/dev/null || true)
|
||||
fi
|
||||
|
||||
if ! version_gte "$current_version" "$min_version"; then
|
||||
if command -v npx >/dev/null 2>&1; then
|
||||
echo "Node.js ${current_version} erkannt. Nutze node@20 Fallback via npx."
|
||||
if npx -y node@20 -v >/dev/null 2>&1; then
|
||||
USE_NODE20_NPX=1
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Node.js ${current_version} erkannt. Erforderlich: >= ${min_version}."
|
||||
echo "Projektlokal:"
|
||||
echo "nvm install ${min_version} && nvm use"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
run_npm() {
|
||||
if (( USE_NODE20_NPX == 1 )); then
|
||||
npx -y node@20 "$(command -v npm)" "$@"
|
||||
else
|
||||
npm "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
ensure_minimum_node_version "$ROOT_DIR"
|
||||
|
||||
if [[ ! -d "$ROOT_DIR/node_modules" ]]; then
|
||||
echo "Installiere Abhaengigkeiten in $ROOT_DIR ..."
|
||||
run_npm install
|
||||
fi
|
||||
|
||||
if [[ ! -d "$ROOT_DIR/backend/node_modules" ]]; then
|
||||
echo "Installiere Abhaengigkeiten in $ROOT_DIR/backend ..."
|
||||
run_npm --prefix backend install
|
||||
fi
|
||||
|
||||
if [[ ! -d "$ROOT_DIR/frontend/node_modules" ]]; then
|
||||
echo "Installiere Abhaengigkeiten in $ROOT_DIR/frontend ..."
|
||||
run_npm --prefix frontend install
|
||||
fi
|
||||
|
||||
echo "Starte Ripster Dev-Umgebung ..."
|
||||
if (( USE_NODE20_NPX == 1 )); then
|
||||
exec npx -y node@20 "$(command -v npm)" run dev
|
||||
else
|
||||
exec npm run dev
|
||||
fi
|
||||
Reference in New Issue
Block a user