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

React Native Expo绝对路径配置无效:模块无法解析问题求助

解决React Native绝对路径无法解析的问题

问题分析

你当前的配置存在规则冲突:

  1. tsconfig.json 设置了baseUrl: "./src",允许直接从src根目录导入(比如import X from 'infrastructure/controllers/AppControllers'),但babel-plugin-root-import配置了rootPathPrefix: 'src',要求导入时必须加src/前缀,两者逻辑不匹配。
  2. Expo/React Native的Metro打包器未针对绝对路径做适配,导致解析失败。

修正步骤

方案一:移除babel插件,用TS原生路径配置(推荐)

这种方式更简洁,符合TS原生解析逻辑:

  • 修改tsconfig.json,添加paths确保TS识别绝对路径:
{
  "extends": "expo/tsconfig.base",
  "compilerOptions": {
    "strict": true,
    "baseUrl": "./src",
    "paths": {
      "*": ["*"]
    }
  }
}
  • 简化babel.config.js,删除babel-plugin-root-import插件:
module.exports = function (api) {
  api.cache(true);
  return {
    presets: ['module:metro-react-native-babel-preset']
  };
};
  • 添加/修改metro.config.js,让Metro支持绝对路径解析:
const { getDefaultConfig } = require('expo/metro-config');

const config = getDefaultConfig(__dirname);

config.resolver.resolveRequest = (context, moduleName, platform) => {
  // 处理非相对路径的导入,直接从src目录查找
  if (!moduleName.startsWith('.') && !moduleName.startsWith('/')) {
    return context.resolveRequest(context, `./src/${moduleName}`, platform);
  }
  return context.resolveRequest(context, moduleName, platform);
};

module.exports = config;

方案二:保留babel插件,统一前缀规则

如果偏好带前缀的导入方式,调整配置保持一致:

  • 修改tsconfig.json,对应前缀配置:
{
  "extends": "expo/tsconfig.base",
  "compilerOptions": {
    "strict": true,
    "baseUrl": "./",
    "paths": {
      "src/*": ["./src/*"]
    }
  }
}
  • 调整babel插件配置,确保前缀和路径匹配:
module.exports = function (api) {
  api.cache(true);
  return {
    presets: ['module:metro-react-native-babel-preset'],
    plugins: [
      [
        'babel-plugin-root-import',
        {
          paths: [
            {
              rootPathSuffix: './src',
              rootPathPrefix: 'src/'
            },
          ]
        },
      ],
    ],
  };
};

此时导入需写成import AppControllers from 'src/infrastructure/controllers/AppControllers'

最后验证

  1. 保存所有配置文件后,必须重启Metro打包器,否则新配置不生效
  2. 检查导入语句是否符合对应方案的规则
  3. 确认src/infrastructure/controllers/AppControllers.ts(或.tsx)文件存在,注意文件名大小写(部分系统对大小写敏感)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:17:13