React Native 与 Typescript 和 Jest 在 0.57 更新后被破坏:无法找到相对于目录的预设“modulemetro-react-na

作者:编程家 分类: typescript 时间:2025-08-25

近期,许多React Native开发者在升级到0.57版本后遇到了一些问题。其中一个主要问题是与Typescript和Jest的兼容性问题。在升级后,开发者们可能会收到一个错误消息,指出找不到相对于目录的预设“module:metro-react-native-babel-preset”。本文将探讨这个问题,并提供一些解决方案。

问题背景

React Native是一个非常受欢迎的跨平台移动应用开发框架,它允许开发者使用JavaScript编写原生应用。Typescript是一种强类型的JavaScript超集,它提供了更好的类型检查和IDE支持。Jest是一个用于测试JavaScript代码的框架。

在React Native 0.57版本中,引入了一些重大的变化和改进。其中一个变化是将Babel配置文件从根目录中的.babelrc迁移到项目的metro.config.js文件中。这个变化可能导致Typescript和Jest在升级后无法找到正确的Babel预设。

问题解决方案

要解决此问题,我们需要对项目进行一些调整。

首先,我们需要在项目的根目录中创建一个metro.config.js文件(如果还没有)。在该文件中,我们需要添加以下内容:

javascript

module.exports = {

resolver: {

babelPresetPath: require.resolve('metro-react-native-babel-preset'),

},

};

这将告诉React Native使用正确的Babel预设。

接下来,我们需要在项目的根目录中的package.json文件中添加以下内容:

json

"jest": {

"preset": "react-native"

}

这将确保Jest使用React Native的默认预设。

最后,我们需要更新tsconfig.json文件,将"jsx"设置为"react-native":

json

"compilerOptions": {

"jsx": "react-native"

}

这将确保Typescript正确地解析React Native的JSX语法。

案例代码

下面是一个示例代码,演示了如何使用React Native、Typescript和Jest:

javascript

// App.tsx

import React from 'react';

import { View, Text } from 'react-native';

const App = () => {

return (

Hello, React Native!

);

};

export default App;

typescript

// App.test.tsx

import 'react-native';

import React from 'react';

import App from './App';

import renderer from 'react-test-renderer';

it('renders correctly', () => {

const tree = renderer.create().toJSON();

expect(tree).toMatchSnapshot();

});

这个示例代码中,我们创建了一个简单的React Native应用程序,并使用Jest对其进行了测试。

在React Native 0.57版本中,与Typescript和Jest的兼容性问题可能会导致无法找到预设“module:metro-react-native-babel-preset”的错误。通过在metro.config.js文件中指定正确的预设路径、在package.json文件中设置Jest预设,并更新tsconfig.json文件,我们可以解决这个问题。希望本文能帮助到遇到这个问题的开发者们。