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

NX monorepo集成Expo后React Native构建报错:无法解析./src/main

解决方法

1. 调整Metro配置适配NX Monorepo

在你的React Native应用目录下创建/修改metro.config.js,明确指定项目根目录并适配monorepo结构,同时映射自定义模块名:

const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
const path = require('path');

const customConfig = {
  // 把Metro的项目根设为当前RN应用目录
  projectRoot: __dirname,
  // 监听NX工作区根目录,确保能解析跨包依赖
  watchFolders: [path.resolve(__dirname, '../../')],
  resolver: {
    // 指定node_modules的查找路径,覆盖默认的根目录查找
    nodeModulesPaths: [
      path.resolve(__dirname, 'node_modules'),
      path.resolve(__dirname, '../../node_modules')
    ],
    // 映射自定义模块名到实际入口文件
    resolveRequest: (context, moduleName) => {
      if (moduleName === 'myappname') {
        return {
          filePath: path.resolve(__dirname, './src/main.tsx'), // 替换为你的实际入口文件路径
          type: 'sourceFile'
        };
      }
      return context.resolveRequest(context, moduleName);
    }
  }
};

module.exports = mergeConfig(getDefaultConfig(__dirname), customConfig);

2. 同步Expo配置与模块名

在RN应用的app.json(或app.config.js)中,同步模块名并明确入口路径:

{
  "name": "myappname",
  "displayName": "My App Name",
  "entryPoint": "./src/main.tsx"
}

3. 修正NX启动配置

打开RN应用目录下的project.json,修改start命令的Metro配置路径:

{
  "targets": {
    "start": {
      "executor": "@nrwl/react-native:start",
      "options": {
        "port": 8081,
        "metroConfig": "apps/myappname/metro.config.js" // 替换为你的RN应用相对路径
      }
    }
  }
}

4. 清除缓存重启服务

执行以下命令彻底清理缓存,避免旧配置干扰:

# 重置Metro缓存
npx react-native start --reset-cache
# 重置iOS依赖(可选)
cd apps/myappname/ios && pod deintegrate && pod install

问题根源

Expo集成会改变Metro的默认解析逻辑,而NX的monorepo结构要求Metro必须明确项目根目录。你修改了iOS端的moduleName但未同步配置Metro的入口映射,导致Metro错误地从NX工作区根目录查找./src/main,而非RN应用目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:25:24