verify_setup.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. #!/usr/bin/env node
  2. /**
  3. * 验证前端环境设置
  4. *
  5. * 检查:
  6. * - Node.js版本
  7. * - 依赖包安装
  8. * - TypeScript配置
  9. * - 构建配置
  10. */
  11. import { execSync } from 'child_process';
  12. import { existsSync, readFileSync } from 'fs';
  13. import { join, dirname } from 'path';
  14. import { fileURLToPath } from 'url';
  15. const __filename = fileURLToPath(import.meta.url);
  16. const __dirname = dirname(__filename);
  17. function checkNodeVersion() {
  18. console.log('\n检查Node.js版本:');
  19. try {
  20. const version = process.version;
  21. const majorVersion = parseInt(version.slice(1).split('.')[0]);
  22. console.log(` ✓ Node.js版本: ${version}`);
  23. if (majorVersion < 18) {
  24. console.log(' ❌ 需要Node.js 18或更高版本');
  25. return false;
  26. }
  27. console.log(' ✓ Node.js版本符合要求');
  28. return true;
  29. } catch (error) {
  30. console.log(` ❌ Node.js检查失败: ${error.message}`);
  31. return false;
  32. }
  33. }
  34. function checkPackageManager() {
  35. console.log('\n检查包管理器:');
  36. try {
  37. const npmVersion = execSync('npm --version', { encoding: 'utf8' }).trim();
  38. console.log(` ✓ npm版本: ${npmVersion}`);
  39. try {
  40. const yarnVersion = execSync('yarn --version', { encoding: 'utf8' }).trim();
  41. console.log(` ✓ yarn版本: ${yarnVersion}`);
  42. } catch {
  43. console.log(' ⚠️ yarn未安装 (可选)');
  44. }
  45. return true;
  46. } catch (error) {
  47. console.log(` ❌ 包管理器检查失败: ${error.message}`);
  48. return false;
  49. }
  50. }
  51. function checkDependencies() {
  52. console.log('\n检查依赖包:');
  53. const nodeModulesPath = join(__dirname, 'node_modules');
  54. if (!existsSync(nodeModulesPath)) {
  55. console.log(' ❌ node_modules目录不存在');
  56. console.log(' 请运行: yarn install 或 npm install');
  57. return false;
  58. }
  59. console.log(' ✓ node_modules目录存在');
  60. // 检查关键依赖
  61. const criticalDeps = [
  62. 'react',
  63. 'react-dom',
  64. 'vite',
  65. 'typescript',
  66. 'antd',
  67. '@ant-design/icons',
  68. 'react-router-dom',
  69. 'axios'
  70. ];
  71. let allDepsOk = true;
  72. for (const dep of criticalDeps) {
  73. const depPath = join(nodeModulesPath, dep);
  74. if (existsSync(depPath)) {
  75. try {
  76. const packageJson = JSON.parse(
  77. readFileSync(join(depPath, 'package.json'), 'utf8')
  78. );
  79. console.log(` ✓ ${dep}: ${packageJson.version}`);
  80. } catch {
  81. console.log(` ✓ ${dep}: 已安装`);
  82. }
  83. } else {
  84. console.log(` ❌ ${dep}: 未安装`);
  85. allDepsOk = false;
  86. }
  87. }
  88. return allDepsOk;
  89. }
  90. function checkConfiguration() {
  91. console.log('\n检查配置文件:');
  92. const configFiles = [
  93. 'package.json',
  94. 'vite.config.ts',
  95. 'tsconfig.json',
  96. 'index.html'
  97. ];
  98. let allConfigsOk = true;
  99. for (const file of configFiles) {
  100. const filePath = join(__dirname, file);
  101. if (existsSync(filePath)) {
  102. console.log(` ✓ ${file}`);
  103. } else {
  104. console.log(` ❌ ${file} 不存在`);
  105. allConfigsOk = false;
  106. }
  107. }
  108. return allConfigsOk;
  109. }
  110. function checkTypeScript() {
  111. console.log('\n检查TypeScript:');
  112. try {
  113. execSync('npx tsc --noEmit', {
  114. encoding: 'utf8',
  115. stdio: 'pipe'
  116. });
  117. console.log(' ✓ TypeScript编译检查通过');
  118. return true;
  119. } catch (error) {
  120. console.log(' ❌ TypeScript编译检查失败');
  121. console.log(` 错误: ${error.message}`);
  122. return false;
  123. }
  124. }
  125. function checkBuild() {
  126. console.log('\n检查构建配置:');
  127. try {
  128. // 只检查配置,不实际构建
  129. execSync('npx vite build --dry-run', {
  130. encoding: 'utf8',
  131. stdio: 'pipe'
  132. });
  133. console.log(' ✓ Vite构建配置正确');
  134. return true;
  135. } catch (error) {
  136. // dry-run可能不被支持,尝试其他方式
  137. try {
  138. execSync('npx vite --version', { encoding: 'utf8', stdio: 'pipe' });
  139. console.log(' ✓ Vite配置可用');
  140. return true;
  141. } catch {
  142. console.log(' ❌ Vite构建配置检查失败');
  143. return false;
  144. }
  145. }
  146. }
  147. function main() {
  148. console.log('='.repeat(50));
  149. console.log('Frontend 环境验证');
  150. console.log('='.repeat(50));
  151. const checks = [
  152. { name: 'Node.js版本', fn: checkNodeVersion },
  153. { name: '包管理器', fn: checkPackageManager },
  154. { name: '依赖包', fn: checkDependencies },
  155. { name: '配置文件', fn: checkConfiguration },
  156. { name: 'TypeScript', fn: checkTypeScript },
  157. { name: '构建配置', fn: checkBuild }
  158. ];
  159. const results = [];
  160. for (const { name, fn } of checks) {
  161. try {
  162. const result = fn();
  163. results.push({ name, result });
  164. } catch (error) {
  165. console.log(` ❌ ${name}检查失败: ${error.message}`);
  166. results.push({ name, result: false });
  167. }
  168. }
  169. console.log('\n' + '='.repeat(50));
  170. console.log('验证结果:');
  171. console.log('='.repeat(50));
  172. let allPassed = true;
  173. for (const { name, result } of results) {
  174. const status = result ? '✓ 通过' : '❌ 失败';
  175. console.log(` ${name}: ${status}`);
  176. if (!result) allPassed = false;
  177. }
  178. if (allPassed) {
  179. console.log('\n🎉 所有检查通过! 前端环境设置正确。');
  180. console.log('\n可以开始开发:');
  181. console.log(' yarn dev - 启动开发服务器');
  182. console.log(' yarn build - 构建生产版本');
  183. console.log(' yarn test - 运行测试');
  184. console.log(' yarn lint - 代码检查');
  185. console.log('\n访问: http://localhost:3000');
  186. } else {
  187. console.log('\n⚠️ 部分检查失败,请检查上述问题。');
  188. console.log('\n常见解决方案:');
  189. console.log(' yarn install - 重新安装依赖');
  190. console.log(' yarn cache clean - 清理缓存');
  191. console.log(' rm -rf node_modules && yarn install - 完全重装');
  192. }
  193. console.log('='.repeat(50));
  194. }
  195. main();