在create-react-native-app项目

时间:2018-07-09 08:31:19

标签: react-native expo

一直在研究通过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. 我稍后对这个问题的回答向其他用户解释为什么降级到0.55可以解决问题(并引用用户可以进一步检查的相关文档),该问题(<这个问题发布时的时间> )没有出现在另一个引用的问题中(尽管目前,将该问题标记为重复的用户现在在引用的问题中有一个答案,该答案也谈到了为什么0.55降级作品)。

3 个答案:

答案 0 :(得分:18)

发现问题是这样的:

在某个时候,必须完成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"
  }
}

答案 1 :(得分:9)

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

npm install react-native@0.55.0

答案 2 :(得分:1)

原因已由@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",