Expo CLI开发React Native执行npm start报ENOENT: 无fs.js文件错误求助
Expo启动报
ENOENT: no such file or directory, open 'fs.js'问题排查与解决 核心诱因定位
从你提供的环境信息和堆栈报错来看,问题并非出在你编写的业务代码,而是环境兼容性、依赖损坏两类问题共同触发的Metro Bundler模块解析异常:Metro在Server.js初始化阶段错误解析Node内置fs模块的引用路径,试图从项目相对路径下读取不存在的fs.js文件,最终抛出文件不存在的错误。
分步排查与解决操作
1. 升级兼容版本的Node环境(优先级最高)
当前环境使用的Node 10.19.0 远低于Expo SDK40、对应Metro版本的最低运行要求:
- Expo SDK40官方要求Node版本不低于12.x,10.x版本的Node模块解析逻辑与新版本Metro存在天然兼容性冲突,是触发该类路径解析错误的最常见原因
- 操作流程:
- 卸载Linux Mint系统源自带的旧版Node:执行
sudo apt remove nodejs npm - 安装14.x版本的Node LTS(与SDK40匹配度最高,无额外兼容问题)
- 安装完成后执行
node -v,确认输出版本为v12.x及以上即可
- 卸载Linux Mint系统源自带的旧版Node:执行
2. 清理损坏的本地依赖与Metro缓存
依赖安装不完整、Metro缓存文件损坏同样会导致模块路径解析错乱,按顺序执行清理操作:
- 进入项目根目录,删除
node_modules文件夹、package-lock.json文件 - 执行
npm cache clean --force清空npm本地缓存 - 重新安装项目依赖:执行
npm install - 启动时强制清空Metro缓存:执行
expo start -c,避免直接使用原有缓存启动
3. 修复全局Expo CLI的版本适配问题
你当前全局安装的Expo CLI 4.3.0属于4.x分支的早期版本,存在已知的Metro配置路径解析bug:
- 执行
npm uninstall -g expo-cli卸载旧版本全局CLI - 重新安装4.x分支的稳定版本:执行
npm install -g expo-cli@4.13.0,该版本是最后一批支持SDK40的稳定CLI版本,无已知的路径解析问题 - 安装完成后执行
expo diagnostics校验环境信息,确认Node、CLI版本匹配后再启动项目
4. 兜底排查项目异常文件
执行完上述步骤后如果仍报错,检查项目根目录下是否存在编辑器误生成的fs.js同名文件:由于Metro的模块解析优先级是项目本地文件高于Node内置模块,若存在空的同名文件,会触发读取失败的ENOENT错误,直接删除该文件即可恢复。
内容的提问来源于stack exchange,提问作者Shobhit Tewari
相关产品推荐
相关产品推荐

