# 故障排除

本节试图概述用户在第一次习惯使用 React Navigation 时经常遇到的问题。这些问题可能与 React Navigation 本身有关,也可能无关。

在解决问题之前,请确保您已经升级到软件包的最新可用版本。你可以通过重新安装包来安装最新版本(例如npm install package-name)。

# 我得到一个错误“Unable to resolve module”更新到最新版本后

这可能有 3 个原因:

Metro 捆绑器陈旧的缓存

如果模块指向一个本地文件(即模块名以 ./ 开头),那么这可能是由于过时的缓存。要解决这个问题,可以尝试以下解决方案。

如果你正在使用 Expo,请运行:

expo start -c

如果你没有使用 Expo,请运行:

npx react-native start --reset-cache

如果这不起作用,你也可以尝试以下方法:

rm -rf $TMPDIR/metro-bundler-cache-*

# 失踪的 peer dependency

如果模块指向一个 npm 包(即模块的名称没有使用./),那么这可能是由于缺少依赖关系。要解决这个问题,在你的项目中安装依赖项:

npm install name-of-the-module

有时它甚至可能是由于一个损坏的安装。如果清理缓存不起作用,请尝试删除你的 node_modules 文件夹,然后再次运行 npm install

# metro 配置中缺少扩展

有时错误看起来像这样:

Error: While trying to resolve module "@react-navigation/native" from file "/path/to/src/App.js", the package "/path/to/node_modules/@react-navigation/native/package.json" was successfully found. However, this package itself specifies a "main" module field that could not be resolved ("/path/to/node_modules/@react-navigation/native/src/index.tsx"

如果您有 metro 的自定义配置,但没有指定 tstsx 作为有效扩展,就可能发生这种情况。这些扩展显示在默认配置中。要检查是否存在这个问题,请在项目中查找 metro.config.js 文件,并检查是否指定了 sourceExts 选项。它至少应该有以下配置:

sourceExts: ['js', 'json', 'ts', 'tsx'];

如果缺少这些扩展,请添加它们,然后清除 metro 缓存,如上面一节所示。