You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js无法识别系统根目录,Expo项目Web编译失败求助

问题分析与解决方案

核心问题

从错误日志能明确看出:Node.js调用PowerShell时,本该是C:\Windows的系统根目录被解析成了undefined,导致路径拼接成无效的undefined\System32\WindowsPowerShell\v1.0\powershell,触发ENOENT(文件不存在)错误。本质是系统环境变量里的SystemRoot或WINDIR丢失,或是Node.js没正确读取到它们。

具体修复步骤

1. 检查并修复系统环境变量

  • 按Win+R输入sysdm.cpl打开系统属性,切到「高级」→「环境变量」
  • 在「系统变量」里确认有没有SystemRoot和WINDIR,正常值都是C:\Windows
    • 要是没有,手动添加:
      • 变量名填SystemRoot,变量值填C:\Windows
      • 变量名填WINDIR,变量值填C:\Windows
  • 确认后点「确定」,必须重启所有终端、IDE,不然新环境变量不会生效

2. 重置Node.js的环境变量缓存

Node.js偶尔会缓存旧的环境变量,按以下步骤重置:

  • 关掉所有Node进程、终端、VS Code这类开发工具
  • 开管理员权限的PowerShell,执行:
    $env:NODE_ENV = ""
    
  • 重新打开终端,输入echo %SystemRoot%(CMD)或$env:SystemRoot(PowerShell),确认输出是C:\Windows
  • 再在终端跑node -e "console.log(process.env.SystemRoot)",验证Node.js能正确读取这个变量

3. 清理Expo项目缓存并检查配置

  • 打开Expo项目根目录的.env文件(如果有的话),确认没手动覆盖SystemRoot或WINDIR
  • 执行expo start --clear清除Expo缓存,再重新启动项目

4. 手动指定PowerShell路径(临时 workaround)

要是上面的步骤都没用,能临时在代码里硬写PowerShell的完整路径:

const { spawn } = require('child_process');
spawn('C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', [...你的参数]);

注意:这只是临时方案,优先解决系统环境变量的根源问题

5. 排查Node.js安装与权限问题

  • 确认Node.js装在默认的C:\Program Files\nodejs路径,当前用户有读写权限
  • 别把Node.js装在带中文、空格的路径里
  • 要是之前用nvm搞出的问题,彻底卸载nvm后,重新装Node.js并勾选「Add to PATH」选项

内容的提问来源于stack exchange,提问作者BladedShip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:57:29