check-node-version.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/env node
  2. import fs from 'fs';
  3. import path from 'path';
  4. import { execSync } from 'child_process';
  5. import { fileURLToPath } from 'url';
  6. const __filename = fileURLToPath(import.meta.url);
  7. const __dirname = path.dirname(__filename);
  8. // 读取 .nvmrc 文件获取所需的 Node.js 版本
  9. let requiredVersion;
  10. try {
  11. requiredVersion = fs.readFileSync(path.join(__dirname, '..', '.nvmrc'), 'utf8').trim();
  12. } catch (error) {
  13. console.error('错误: 无法读取 .nvmrc 文件');
  14. process.exit(1);
  15. }
  16. const currentVersion = process.version.slice(1); // 移除版本号前的 'v'
  17. console.log(`检查 Node.js 版本...`);
  18. console.log(`当前版本: ${currentVersion}`);
  19. console.log(`所需版本: ${requiredVersion}`);
  20. // 解析版本号的所有部分
  21. const parseVersion = (version) => {
  22. const parts = version.split('.').map(Number);
  23. return {
  24. major: parts[0],
  25. minor: parts[1] || 0,
  26. patch: parts[2] || 0
  27. };
  28. };
  29. const current = parseVersion(currentVersion);
  30. const required = parseVersion(requiredVersion);
  31. // 检查版本是否匹配
  32. const isVersionMatch =
  33. current.major === required.major &&
  34. current.minor >= required.minor;
  35. if (!isVersionMatch) {
  36. console.error(`\n错误: Node.js 版本不匹配!`);
  37. console.error(`本项目需要 Node.js ${requiredVersion}`);
  38. console.error(`当前使用的是 Node.js ${currentVersion}`);
  39. console.error(`\n请尝试以下方法之一:`);
  40. console.error(`1. 使用项目提供的版本切换脚本:`);
  41. console.error(` ./scripts/use-node-version.sh node -v`);
  42. console.error(`2. 如果已安装 nvm: 运行 'nvm use ${requiredVersion}'`);
  43. console.error(`3. 安装所需版本: 'nvm install ${requiredVersion}'`);
  44. console.error(`4. 从 https://nodejs.org/ 下载并安装 Node.js ${requiredVersion}`);
  45. process.exit(1);
  46. }
  47. // 检查是否已安装 nvm
  48. try {
  49. execSync('command -v nvm', { stdio: 'ignore' });
  50. // 如果 nvm 可用,尝试自动切换版本
  51. try {
  52. execSync(`. "${process.env.NVM_DIR}/nvm.sh" && nvm use ${requiredVersion}`, {
  53. stdio: 'inherit',
  54. shell: '/bin/bash'
  55. });
  56. } catch (error) {
  57. // 如果自动切换失败,继续执行,因为当前版本已经匹配
  58. }
  59. } catch (error) {
  60. // nvm 未安装,但当前版本已经匹配,所以继续执行
  61. }
  62. console.log(`\n✓ Node.js 版本检查通过! (${currentVersion})`);