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

使用pnpm创建的Expo应用提示文件缺失,但文件实际存在

修复Expo + pnpm运行Android时的模块解析错误

问题描述

使用pnpm create expo-app创建项目并完成依赖安装后,执行yarn android(等价于expo start --android)时触发模块解析错误,提示找不到./node_modules\expo\AppEntry,但手动核查后确认该文件实际存在。已尝试启用shamefully-hoisting、将项目迁移至无空格路径,问题仍未解决。

报错信息:

Error: Unable to resolve module ./node_modules\expo\AppEntry from C:\Users\HariC\AndroidStudioProjects\chat/.:

None of these files exist:

  • node_modules\expo\AppEntry(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)
  • node_modules\expo\AppEntry\index(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)
    at ModuleResolver.resolveDependency (C:\Users\HariC\AndroidStudioProjects\chat\node_modules.pnpm\metro@0.72.3\node_modules\metro\src\node-haste\DependencyGraph\ModuleResolution.js:152:15)
    at DependencyGraph.resolveDependency (C:\Users\HariC\AndroidStudioProjects\chat\node_modules.pnpm\metro@0.72.3\node_modules\metro\src\node-haste\DependencyGraph.js:264:43)
    at C:\Users\HariC\AndroidStudioProjects\chat\node_modules.pnpm\metro@0.72.3\node_modules\metro\src\lib\transformHelpers.js:170:21
    at Server._resolveRelativePath (C:\Users\HariC\AndroidStudioProjects\chat\node_modules.pnpm\metro@0.72.3\node_modules\metro\src\Server.js:1196:12)
    at async Server.requestProcessor [as _processBundleRequest] (C:\Users\HariC\AndroidStudioProjects\chat\node_modules.pnpm\metro@0.72.3\node_modules\metro\src\Server.js:484:37)
    at async Server._processRequest (C:\Users\HariC\AndroidStudioProjects\chat\node_modules.pnpm\metro@0.72.3\node_modules\metro\src\Server.js:435:9)

解决方法

1. 修正package.json入口配置

打开项目根目录的package.json,确认main字段指向正确路径。默认Expo项目的main应设置为:

"main": "node_modules/expo/AppEntry.js"

如果路径混用了/和\,手动统一为正斜杠格式。

2. 清除Metro缓存重启服务

Metro缓存可能导致路径解析异常,执行以下命令清除缓存后重新启动:

pnpm expo start --clear

3. 配置pnpm的依赖提升规则

在项目根目录创建或编辑.npmrc文件,添加以下配置确保Metro能正确识别pnpm的依赖结构:

public-hoist-pattern[]=*metro*
public-hoist-pattern[]=*expo*
shamefully-hoisting=true

保存后删除现有依赖和锁文件,重新安装:

rm -rf node_modules pnpm-lock.yaml
pnpm install

4. 手动配置Metro解析路径

在项目根目录创建或编辑metro.config.js,添加自定义解析路径:

const path = require('path');
const { getDefaultConfig } = require('expo/metro-config');

const config = getDefaultConfig(__dirname);

config.resolver.nodeModulesPaths = [
  path.resolve(__dirname, './node_modules'),
  path.resolve(__dirname, './node_modules/expo/node_modules'),
];

module.exports = config;

5. 统一使用pnpm执行启动命令

避免混用yarn和pnpm,直接用pnpm启动Android服务:

pnpm expo start --android

内容的提问来源于stack exchange,提问作者Mayank Kumar Chaudhari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:00:59