我有一个建立在expo 之上的 react native 应用程序,最近try 将我的expo SDK从48版升级到50版.

显然,这并不是一个平稳的过渡.我清除错误已经有一段时间了,但我被困在了这个问题上:

错误:发现node_modules/expo-modules-core/build/NativeViewManagerAdapter.native.js:/Users/maximilianofriedl/Documents/examedi/patient-app/node_modules/expo-modules-core/build/NativeViewManagerAdapter.native.js:重复__自立属性.您最有可能使用的是已弃用的Transform-Reaction-JSX-self Babel插件.使用自动运行时,会自动设置__SOURCE和__SELF.请从您的Babel配置中删除Transform-Reaction-JSX-SOURCE和Transform-Reaction-JSX-self.

它引用了我的Babel配置中的transform-react-jsx-sourcetransform-react-jsx-self插件,但是...我没有这些东西.

下面是我的babel.config.js人的样子:

module.exports = function (api) {
  api.cache(true);
  return {
    presets: ["babel-preset-expo", "module:metro-react-native-babel-preset"],
    plugins: [
      "nativewind/babel",
      "babel-plugin-root-import",
      [
        "@babel/plugin-proposal-class-properties",
        {
          loose: true,
        },
      ],
      [
        require.resolve("babel-plugin-module-resolver"),
        {
          root: ["./src/"],
          alias: {
            test: "./test",
          },
        },
      ],
      "react-native-reanimated/plugin",
    ],
  };
};

我不确定这是否与问题有关,但我在某个地方读到我的metro.config.js也可能是问题,所以这里是它的样子:

const { getDefaultConfig } = require("@expo/metro-config");

// reference: https://github.com/react-native-svg/react-native-svg/blob/main/USAGE.md
module.exports = (async () => {
  const {
    resolver: { sourceExts, assetExts },
  } = await getDefaultConfig(__dirname);
  assetExts.push("cjs");
  return {
    transformer: {
      assetPlugins: ["expo-asset/tools/hashAssetFiles"],
      babelTransformerPath: require.resolve("react-native-svg-transformer"),
    },
    resolver: {
      assetExts: assetExts.filter((ext) => ext !== "svg"),
      sourceExts: [...sourceExts, "svg"],
    },
  };
})();

我认为package.json件事中最重要的是:

"dependencies": {
  "babel-preset-expo": "^10.0.0",
},
"devDependencies": {
  "@babel/core": "^7.20.0",
  "@babel/plugin-proposal-class-properties": "^7.18.6",
  "babel-plugin-module-resolver": "^5.0.0",
  "babel-plugin-root-import": "^6.6.0",
  "metro-react-native-babel-preset": "^0.77.0",
  "react-native-svg-transformer": "^1.3.0",
},

有谁知道我该怎么解决这个问题吗?

推荐答案

巴别塔预设程序包名称已更改. metro-react-native-babel-preset改成了@react-native/babel-preset

卸载旧的并安装新的,您应该可以开始工作了.它在我的 case 中奏效了.

更多信息:https://reactnative.dev/blog/2023/12/06/0.73-debugging-improvements-stable-symlinks#babel-package-renames

React-native相关问答推荐

用图像 react native 动画进度条

React Native 响应式图像宽度,而图像的宽度/高度比保持不变

你如何在生产模式下运行 react-native 应用程序?

更改整个 React Native App 的语言

如何在 Crashlytics (Fabrics) 中有效地对非致命异常进行分组?

React-native,iOS模拟器停止响应CMD + D

react-native - 如何在过go 两个文件夹中导入组件?

可以在没有 await 关键字的情况下调用异步函数吗?

带有 react-navigation 的 DrawerNavigation 标头

React Native with Typescript and Jest 在 0.57 更新后被 destruct :Couldn't find preset "module:metro-react-native-babel-preset" relative to directory

mapDispatchToProps:有什么意义吗?

React Native 创建自定义组件/库

react-native fetch 和基本身份验证

创建新的 react-native 元素时出现Unexpected token import错误

HighLight / ScrollTo - React-Native 上的 ListView、ScrollView

xcode 10错误:multiple commands produce

React-Native Invariant Violation:元素类型无效

React本机IOS,当TextInput获得焦点时,按钮按下不注册

Super expression must either be null or a function, not undefined

如何修复 npm 审计修复问题?