【问题标题】:Suddenly seeing error "Plugin/Preset files are not allowed to export objects, only functions" in create-react-native-app project在 create-react-native-app 项目中突然看到错误“插件/预设文件不允许导出对象,只有功能”
【发布时间】:2018-07-09 08:31:18
【问题描述】:

一直致力于通过create-react-native-app 生成的项目。已经成功使用该项目有一段时间了,但现在尝试通过exp start --tunnel 测试应用程序,我突然看到错误(虽然以前工作过)的形式:

[22:08:19] /path/to/node_modules/react-native-scripts/build/bin/crna-entry.js: Plugin/Preset files are not allowed to export objects, only functions. In /path/to/node_modules/babel-preset-expo/index.js
[22:08:19] Failed building JavaScript bundle.

看过一些似乎可以解决问题的帖子(https://github.com/babel/babel/issues/6808Babel Plugin/Preset files are not allowed to export objects, only functions),但对任何反应都是全新的,并且不完全了解 bable 是什么,所以很难理解如何将这些帖子应用到我自己的情况。

我的 .bablerc 文件(在其他帖子中似乎是相关的)是:

{
  "presets": ["babel-preset-expo"],
  "env": {
    "development": {
      "plugins": ["transform-react-jsx-source"]
    }
  }
}

已尝试npm cache clean --force && rm -rf node_modules && rm -f package-lock.json && npm install 没有任何变化。 似乎有帮助的是从 react-native@0.56 降级到 0.55(如本文所支持的:Create React Native App. - Plugin/Preset files are not allowed to export objects, only functions),但这似乎并不能直接解决问题,更多的是解决方法。任何关于这里应该做什么的建议都将不胜感激(应该包含任何其他文件以帮助调试?)。


** 针对这个问题被标记为Create React Native App. - Plugin/Preset files are not allowed to export objects, only functions 的潜在重复,

  1. 这个问题实际上是在帖子中引用的,并且在最后一段中包含了为什么尽管存在另一个问题而发布了这个问题的解释,并且
  2. 我稍后对 this 问题的回答向其他用户解释了为什么降级到 0.55 解决了问题(并引用了用户可以进一步检查的相关文档),其中(在发布此问题时)未出现在其他引用的问题中(尽管目前,已将此问题标记为重复的用户现在在引用的问题中有一个答案,该答案也谈到了原因0.55 降级有效)。

【问题讨论】:

    标签: react-native expo


    【解决方案1】:

    发现问题是这样的:

    在某些时候,一定是做了一个 npm update 更新 react-native 到 0.56 和 expo 到 28.0.0。

    查看 react-native 文档 (https://facebook.github.io/react-native/docs/upgrading.html#create-react-native-app-projects),react-native 似乎需要安装相互特别兼容的 react-nativereactexpo 版本强>。可以在此处找到哪些软件包的哪些版本相互兼容的矩阵:https://github.com/react-community/create-react-native-app/blob/master/VERSIONS.md 并说

    这些依赖项的每个版本仅与其他两个的狭窄版本范围兼容。

    截至撰写本文时,该文档最后一次更新是在 2018 年 4 月 27 日,因此尚不清楚应该使用哪些版本的 react 和 expo(最近发布了 28.0.0 版)与现已推出的 react-native@0.56 结合使用。 记录的最新 react-native 版本是 react-native@0.55(与 react@16.3.1 和 expo@27.0.0 一起使用),我认为这就是为什么 降级到react-native@0.55 在这种情况下很有帮助(我不知道为什么矩阵中还没有 react-native@0.56 的文档),我的 package.json 现在看起来像:

    ...
    "dependencies": {
        "@expo/vector-icons": "^6.3.1",
        "eslint": "^4.19.1",
        "expo": "^27.1.0",
        "prop-types": "^15.6.2",
        "react": "16.3.1",
        "react-native": "^0.55.4",
        "react-native-mail": "^3.0.6",
        "react-native-modal-dropdown": "^0.6.2",
        "react-navigation": "^2.6.2",
        "react-redux": "^5.0.7",
        "redux": "^4.0.0",
        "tcomb-form-native": "^0.6.14",
        "uuid": "^3.3.2"
      }
    }
    

    【讨论】:

    • Expo,即使在 29 版中,也不支持 React Native 0.56。 See my answer to this similar question.
    • @fagerbua 答案未提及 expo v29,我认为此评论是针对此帖子的 this 答案 (stackoverflow.com/a/51583673/8236733) 下的?
    • 对不起,我想在这里发表评论,但本可以更准确。与您的回答相关的一点是,没有当前版本的 Expo 旨在与 react-native@0.56 一起使用。
    • 哇。所以,我建立了一个项目,按照 npm 文档中推荐的分步指南,安装 react-native & expo。在启动虚拟设备、运行 expo 并等待我的代码在所述设备上加载后,我收到一个神秘的错误,手动搜索将我带到这里。都是因为我在 2 个依赖项之间存在轻微的补丁不匹配?有人在某个地方认为“它会做的。把它寄出去。”
    【解决方案2】:

    今天我也遇到了同样的问题。显然,react-native 升级到了 0.56.0。 将 react-native 版本降级回 0.55.0 解决了我的问题

    npm install react-native@0.55.0
    

    【讨论】:

      【解决方案3】:

      @lampShadesDrifter 充分解释了原因,但是我将添加一个更快的解决方案,即使用从 expo 捆绑的 react-native sdk: https://github.com/expo/react-native/

      所以你可以使用 expo sdk 29 添加这个你的依赖项:

      "react-native": "https://github.com/expo/react-native/archive/sdk-29.0.0.tar.gz",

      【讨论】:

        猜你喜欢
        • 2020-02-28
        • 1970-01-01
        • 2018-12-19
        • 1970-01-01
        • 2019-02-08
        • 2018-12-15
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        相关资源
        最近更新 更多