diff --git a/env/init_node.sh b/env/init_node.sh new file mode 100644 index 0000000..cb763e8 --- /dev/null +++ b/env/init_node.sh @@ -0,0 +1,162 @@ +#!/bin/bash + +# ============================================== +# Node.js 安装脚本 +# 功能:自动安装 Node.js 并配置阿里云镜像源 +# 适用系统:CentOS/RHEL、Ubuntu/Debian 等主流 Linux 发行版 +# ============================================== + +# 启用严格模式 +set -euo pipefail + +# -------------------------- +# 颜色定义 +# -------------------------- +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +NC='\033[0m' # No Color + +# -------------------------- +# 日志函数 +# -------------------------- +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" >&2 +} + +# -------------------------- +# 检查 root 权限 +# -------------------------- +check_root() { + if [ "$(id -u)" -ne 0 ]; then + log_error "请使用 root 用户或通过 sudo 运行此脚本" + exit 1 + fi +} + +# -------------------------- +# 检测系统类型 +# -------------------------- +detect_os() { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS_NAME="${ID:-unknown}" + OS_VERSION="${VERSION_ID:-unknown}" + else + log_error "无法检测操作系统类型,请手动安装 Node.js" + exit 1 + fi +} + +# -------------------------- +# 安装依赖工具 +# -------------------------- +install_dependencies() { + log_info "正在安装必要的依赖工具..." + + if [[ "$OS_NAME" == "centos" || "$OS_NAME" == "rhel" || "$OS_NAME" == "rocky" || "$OS_NAME" == "almalinux" ]]; then + dnf install -y curl wget + elif [[ "$OS_NAME" == "ubuntu" || "$OS_NAME" == "debian" ]]; then + apt update + apt install -y curl wget + else + log_error "不支持的操作系统: ${OS_NAME}" + exit 1 + fi +} + +# -------------------------- +# 安装 Node.js +# -------------------------- +install_nodejs() { + log_info "正在安装 Node.js..." + + # 添加 NodeSource 仓库 + if [[ "$OS_NAME" == "centos" || "$OS_NAME" == "rhel" || "$OS_NAME" == "rocky" || "$OS_NAME" == "almalinux" ]]; then + curl -sL https://rpm.nodesource.com/setup_18.x | bash - + dnf install -y nodejs + elif [[ "$OS_NAME" == "ubuntu" || "$OS_NAME" == "debian" ]]; then + curl -sL https://deb.nodesource.com/setup_18.x | bash - + apt install -y nodejs + else + log_error "不支持的操作系统: ${OS_NAME}" + exit 1 + fi + + log_info "Node.js 安装完成" +} + +# -------------------------- +# 配置 npm 阿里云镜像源 +# -------------------------- +configure_npm_mirror() { + log_info "正在配置 npm 阿里云镜像源..." + + npm config set registry https://registry.npmmirror.com + + log_info "npm 阿里云镜像源已配置完成" +} + +# -------------------------- +# 安装并配置 Yarn(可选) +# -------------------------- +install_and_configure_yarn() { + log_info "正在安装并配置 Yarn..." + + # 安装 Yarn + if [[ "$OS_NAME" == "centos" || "$OS_NAME" == "rhel" || "$OS_NAME" == "rocky" || "$OS_NAME" == "almalinux" ]]; then + npm install -g yarn + elif [[ "$OS_NAME" == "ubuntu" || "$OS_NAME" == "debian" ]]; then + npm install -g yarn + fi + + # 配置 Yarn 阿里云镜像源 + yarn config set registry https://registry.npmmirror.com + + log_info "Yarn 安装并配置完成" +} + +# -------------------------- +# 测试 Node.js 和 npm 安装 +# -------------------------- +test_installation() { + log_info "正在测试 Node.js 和 npm 安装..." + + NODE_VERSION=$(node --version) + NPM_VERSION=$(npm --version) + + log_info "Node.js 安装成功,版本为: ${NODE_VERSION}" + log_info "npm 安装成功,版本为: ${NPM_VERSION}" + + if command -v yarn &> /dev/null; then + YARN_VERSION=$(yarn --version) + log_info "Yarn 安装成功,版本为: ${YARN_VERSION}" + fi +} + +# -------------------------- +# 主函数 +# -------------------------- +main() { + check_root + detect_os + install_dependencies + install_nodejs + configure_npm_mirror + install_and_configure_yarn + test_installation +} + +# -------------------------- +# 执行主函数 +# -------------------------- +main +exit 0 \ No newline at end of file