Have been working on a project generated via create-react-native-app
. Have been successfully using the project for some time, but now trying to test the app via exp start --tunnel
, am suddenly seeing error (though was working previously) of the form:
[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.
Have seen some posts that seem to deal with the problem (https://github.com/babel/babel/issues/6808 and Babel Plugin/Preset files are not allowed to export objects, only functions), but am totally new to react-anything and don't fully get what bable
is, so am having difficulty understanding how to apply these posts to my own situation.
My .bablerc file (as it seems to be relevant in the other posts) is:
{
"presets": ["babel-preset-expo"],
"env": {
"development": {
"plugins": ["transform-react-jsx-source"]
}
}
}
Have tried npm cache clean --force && rm -rf node_modules && rm -f package-lock.json && npm install
with no change. What does seem to help is downgrading from [email protected] to 0.55 (as espoused here: Create React Native App. - Plugin/Preset files are not allowed to export objects, only functions), but this does not seem to address the problem directly and more of a workaround. Any advice on what should be done here would be appreciated (any other files that should be included to help debug?).
** In response to this question being marked as a potential duplicate of Create React Native App. - Plugin/Preset files are not allowed to export objects, only functions,
Found that the problem is this:
At some point, must have done a npm update
which updated react-native to 0.56 and expo to 28.0.0.
Looking at the react-native docs (https://facebook.github.io/react-native/docs/upgrading.html#create-react-native-app-projects), react-native seems to require installing versions of react-native
, react
, and expo
that are all specifically compatible with each other. A matrix of which versions of which packages are compatible with each other can be found here: https://github.com/react-community/create-react-native-app/blob/master/VERSIONS.md and says
Each version of these dependencies is only compatible with a narrow version range of the other two.
As of this writing the document was last updated on April 27, 2018, so it is not exactly clear what versions of react and expo (which has recently released version 28.0.0) should be used in combination with the now-out [email protected]. The most recent react-native version that is documented is [email protected] (to go with [email protected] and [email protected]), which I think is why downgrading to [email protected] was helpful in this case (I don't know why there is no documentation in the matrix for [email protected] yet), my package.json now looking like:
...
"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"
}
}