web-dev-qa-db-fra.com

Créer React Native App. - Les fichiers plugin/prédéfinis ne sont pas autorisés à exporter des objets, seules les fonctions

Besoin d'aide, je reçois une étrange erreur hors du champ gauche que je n'ai pas été en mesure de déboguer. Ce projet a été regroupé avec succès jusqu'à hier après la configuration de mon projet natif de réaction sur un autre Mac.

Je me demande s’il s’agit de la gestion des versions des paquets npm que je devais réinstaller. 

N'importe quelle direction serait utile, c'est toujours la configuration qui est la plus difficile car vous le faites si rarement ...

Mon fichier babelrc est comme suit -

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

Et mon package.json

{
  "name": "hancho_frontend",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "jest-expo": "~27.0.0",
    "react-native-scripts": "^1.14.1",
    "react-test-renderer": "16.3.1"
  },
  "main": "./node_modules/react-native-scripts/build/bin/crna-entry.js",
  "scripts": {
    "start": "react-native-scripts start",
    "eject": "react-native-scripts eject",
    "Android": "react-native-scripts Android",
    "ios": "react-native-scripts ios",
    "test": "jest"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@expo/vector-icons": "^6.2.0",
    "axios": "^0.18.0",
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.4",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babel-upgrade": "0.0.19",
    "color": "^2.0.0",
    "expo": "^27.1.0",
    "hoist-non-react-statics": "^2.3.0",
    "moment": "^2.22.2",
    "prop-types": "^15.6.2",
    "react": "^16.3.1",
    "react-dom": "^16.4.1",
    "react-fontawesome": "^1.6.1",
    "react-native": "^0.56.0",
    "react-native-dropdownalert": "^3.1.2",
    "react-native-extended-stylesheet": "^0.8.0",
    "react-navigation": "^2.6.1",
    "react-redux": "^5.0.7",
    "react-router-dom": "^4.3.1",
    "redux": "^4.0.0",
    "redux-axios-middleware": "^4.0.0",
    "redux-logger": "^3.0.6",
    "redux-thunk": "^2.3.0",
    "webpack": "^4.15.1"
  }
}

J'ai définitivement installé des paquets que je n'utilise pas, mais cela n'a pas posé de problème par le passé. 

J'ai effacé le cache, désinstallé et réinstallé node_modules. Je suis également revenu à une version antérieure d'Expo que j'avais déjà utilisée. Toujours pas de chance. 

Merci d'avance!

6
hancho

create-react-native-app utilise Expo, qui depuis la version actuelle (SDK v29) ne prend pas en charge React Native 0.56. Son annonce de sortie explique pourquoi:

Nous n'avons pas mis à jour React Native 0.56.0 pour cette version pour deux raisons. Premièrement, et surtout, dans React Native 0.56.0, babel a été mis à jour à 7.0.0-beta.47 à partir de ^ 6.24.1. Les expériences précédentes avec les mises à jour de babel nous ont montré qu'elles peuvent être frustrantes et prendre beaucoup de temps pour les développeurs qui souhaitent simplement envoyer leur application et minimiser le temps consacré à la destruction des infrastructures.

Deuxièmement, 0.56.0 introduit quelques bugs et n’inclut pas assez de fonctionnalités utiles et de corrections sur 0.55.4 pour justifier le compromis de la mise à jour de Babel.

Si vous voulez vraiment utiliser la RN 0.56 et que vous n'avez pas besoin d'utiliser Expo, vous pouvez supprimer la dépendance en exécutant npm run eject dans le projet. Vous recevrez toujours un message d'erreur similaire lors du chargement de votre application, mais en raison d'une dépendance différente introduite lors de l'éjection. Pour résoudre ce problème, installez babel-preset-react-native@5 et remplacez "babel-preset-réag-native-stage-0/decorator-support" par "babel-preset-réag-native" dans le fichier .babelrc du projet. (Notez que .babelrc est différent une fois que vous avez exécuté la commande d'éjection.)

6
fagerbua

J'ai essayé de mettre à niveau 0.55.2 à 0.53.0 et j'ai rencontré cette erreur. Je n'ai pas essayé de le localiser au-delà, mais le déclassement de reag-native à 0,55 devrait résoudre le problème.

2
Rob D

Mon application est éjectée et la réponse de fagerbua m'a aidée, mais j'ai dû lutter un peu plus loin pour la faire fonctionner. J'ai finalement commencé à créer une nouvelle application native-créer-réagir-native, en éjectant et en modifiant mon package.json et .babelrc pour utiliser babel-preset-react-native, la version 0.56.0 de react-native et la version 16.4.1 de react. J'ai également dû supprimer le plugin transform-react-jsx-source du fichier .babelrc. Vous trouverez ci-dessous les fichiers utilisés pour une application minimale de travail [email protected]:

Fichier .babelrc:

{
  "presets": [
    "babel-preset-react-native"
  ]
}

package.json:

{
  "name": "myapp",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "babel-preset-react-native": "^5",
    "jest": "^23.4.2",
    "jest-react-native": "^18.0.0",
    "react-test-renderer": "16.3.1"
  },
  "scripts": {
    "start": "react-native start",
    "Android": "react-native run-Android",
    "ios": "react-native run-ios",
    "test": "jest"
  },
  "jest": {
    "preset": "react-native"
  },
  "dependencies": {
    "react": "^16.4.1",
    "react-native": "^0.56.0"
  }
}

Une fois que cela fonctionnait avec l'application de base, j'ai copié ces modifications dans mon application principale, supprimé mon dossier node_modules, fait npm install et tout fonctionnait. Je ne sais pas si la version mise à jour de la plaisanterie était nécessaire, je n'utilise pas la plaisanterie, mais elle a été ajoutée automatiquement lors de la création.

1
Dan Taylor

En plus de @fagerbua répondre. Si vous voulez utiliser [email protected], vous devez changer .babelrc avec { "presets": [ "react-native" ] } vous n'avez plus besoin de jest-react-native, mais vous devez utiliser babel-preset-react-native@5.

1
user9908214