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

typescript

1个回答

写回答

Minusone

2025-12-10 21:45

+ 关注

typescript
typescript

近期,许多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 (

<View>

<Text>Hello, React Native!</Text>

</View>

);

};

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(<App />).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文件,我们可以解决这个问题。希望本文能帮助到遇到这个问题的开发者们。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号