使用npm start启动Expo Router项目时遇TypeError: spawn is not a function错误
解决Expo Router项目npm start报错TypeError: spawn is not a function的问题
问题诊断
你遇到的错误核心原因是Node.js v12.22.9与expo 6.3.2的本地依赖存在兼容性冲突:全局expo-cli start --tunnel能正常运行,说明全局expo环境无问题,但项目本地安装的expo包无法在已停止维护的Node.js v12环境下正确调用spawn方法。Node.js v12已终止官方支持,多数新工具的依赖不再适配该版本。
解决方案
方案1:升级Node.js版本(推荐)
expo 6.3.2需要至少Node.js v14及以上版本才能稳定运行,升级步骤如下:
- 用nvm安装并切换到LTS版本(比如v18):
nvm install 18 nvm use 18 - 清除旧依赖并重新安装:
rm -rf node_modules package-lock.json npm install - 执行
npm start即可正常启动项目。
方案2:修改package.json启动脚本
若暂时无法升级Node.js,直接将项目启动命令替换为可正常运行的全局expo-cli命令:
- 打开项目根目录的
package.json,找到scripts中的start字段:"scripts": { "start": "expo start" } - 修改为:
"scripts": { "start": "expo-cli start --tunnel" } - 保存后执行
npm start,即可沿用之前验证有效的全局命令逻辑。
方案3:降级expo适配旧Node版本(不推荐)
若坚持使用Node.js v12,可尝试降级expo到兼容旧版本的系列:
- 删除旧依赖文件:
rm -rf node_modules package-lock.json - 安装适配Node12的expo版本(比如expo 48.x):
注意:降级expo可能导致Expo Router部分功能受限,需提前确认版本兼容性。npm install expo@48.0.20
内容的提问来源于stack exchange,提问作者Otzze
相关产品推荐
相关产品推荐

