#!/usr/bin/env node import fs from 'fs'; import path from 'path'; import { execSync } from 'child_process'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // 读取 .nvmrc 文件获取所需的 Node.js 版本 let requiredVersion; try { requiredVersion = fs.readFileSync(path.join(__dirname, '..', '.nvmrc'), 'utf8').trim(); } catch (error) { console.error('错误: 无法读取 .nvmrc 文件'); process.exit(1); } const currentVersion = process.version.slice(1); // 移除版本号前的 'v' console.log(`检查 Node.js 版本...`); console.log(`当前版本: ${currentVersion}`); console.log(`所需版本: ${requiredVersion}`); // 解析版本号的所有部分 const parseVersion = (version) => { const parts = version.split('.').map(Number); return { major: parts[0], minor: parts[1] || 0, patch: parts[2] || 0 }; }; const current = parseVersion(currentVersion); const required = parseVersion(requiredVersion); // 检查版本是否匹配 const isVersionMatch = current.major === required.major && current.minor >= required.minor; if (!isVersionMatch) { console.error(`\n错误: Node.js 版本不匹配!`); console.error(`本项目需要 Node.js ${requiredVersion}`); console.error(`当前使用的是 Node.js ${currentVersion}`); console.error(`\n请尝试以下方法之一:`); console.error(`1. 使用项目提供的版本切换脚本:`); console.error(` ./scripts/use-node-version.sh node -v`); console.error(`2. 如果已安装 nvm: 运行 'nvm use ${requiredVersion}'`); console.error(`3. 安装所需版本: 'nvm install ${requiredVersion}'`); console.error(`4. 从 https://nodejs.org/ 下载并安装 Node.js ${requiredVersion}`); process.exit(1); } // 检查是否已安装 nvm try { execSync('command -v nvm', { stdio: 'ignore' }); // 如果 nvm 可用,尝试自动切换版本 try { execSync(`. "${process.env.NVM_DIR}/nvm.sh" && nvm use ${requiredVersion}`, { stdio: 'inherit', shell: '/bin/bash' }); } catch (error) { // 如果自动切换失败,继续执行,因为当前版本已经匹配 } } catch (error) { // nvm 未安装,但当前版本已经匹配,所以继续执行 } console.log(`\n✓ Node.js 版本检查通过! (${currentVersion})`);