| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #!/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})`);
|