J'ai donc eu mon premier projet dans ReactNative à exécuter à partir de Windows pour Android OS. J'ai pris une commande sur un Mac, je l'ai configuré de la même manière et pendant que j'essaie de démarrer le gestionnaire de packages de React en utilisant react-native start
et obtenez l'erreur suivante:
child_process.js:506
throw err;
^
Error: spawnSync /Users/UserName/Desktop/Path/node_modules/react-native/local-cli/setup_env.sh EACCES
at exports._errnoException (util.js:1022:11)
at spawnSync (child_process.js:461:20)
at Object.execFileSync (child_process.js:498:13)
at Object.run (/Users/UserName/Desktop/Path/node_modules/react-native/local-cli/cliEntry.js:156:16)
at Object.<anonymous> (/usr/local/lib/node_modules/react-native-cli/index.js:117:7)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
Je suis conscient qu'il essaie uniquement de définir l'ulimit (limite de fichier ouvert) à 2048, ce qui est autorisé pour les utilisateurs non root. A également essayé d'exécuter la commande avec Sudo en lui accordant des autorisations root. Fonctionnement ulimit -a
sur la machine a révélé une limite de 256 fichiers ouverts et j'ai essayé de changer la valeur par défaut 2048 en ceci. J'ai essayé de l'augmenter à 4096 et de supprimer complètement la commande. Semble ne faire aucune différence quoi que ce soit et l'erreur persiste.
A créé un nouveau projet en utilisant react-native init DemoProject
et le packager semble démarrer dans ce dossier donc le problème est autre chose?
Mon package.json est:
{
"name": "React Native",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"native-base": "^0.5.18",
"react": "15.4.1",
"react-addons-shallow-compare": "^15.4.1",
"react-native": "0.39.2",
"react-native-drawer": "^2.3.0",
"react-native-icons": "^0.7.1",
"react-native-loading-spinner-overlay": "^0.4.1",
"react-native-md-textinput": "^2.0.4",
"react-native-overlay": "^0.5.0",
"react-native-scrollable-tab-view": "^0.7.0",
"react-native-tab-view": "0.0.40",
"react-redux": "^4.4.6",
"react-timer-mixin": "^0.13.3",
"redux": "^3.6.0"
},
"devDependencies": {
"babel-jest": "17.0.2",
"babel-preset-react-native": "1.9.0",
"jest": "17.0.3",
"react-test-renderer": "15.4.1"
},
"jest": {
"preset": "react-native"
}
}
En outre, si cela importe, j'ai la sinopie, la navigateur et le fil installés dans le monde entier.
Pour commencer, je ne sais pas si je devrais ajouter toutes les dépendances locales via npm encore une fois sur le Mac, puis simplement copier mon code ou cela devrait aller et quelque chose d'autre ne va pas.
Ce serait formidable si je pouvais régler cela sans rajouter de dépendances. Merci d'avance.
Je devais simplement aller dans le répertoire de mon projet de base et exécuter
chmod -R 777 node_modules
C'est un bug de npm. Avant de corriger le bogue, vous avez 2 façons de résoudre le problème:
dans mon cas, l'erreur était avec un fichier particulier quand je le fais react-native link
:
Erreur: spawnSync ~/native-starter-kit/node_modules/react-native/local-cli/setup_env.sh EACCES
donc je l'ai corrigé en exécutant: chmod +x
sur ce fichier.
chmod -R 777 node_modules
Ça marche vraiment!
Comme l'a souligné Jerry, il s'agit d'un bogue dans NPM. Un correctif est disponible maintenant. Vous pouvez mettre à jour NPM avec npm i -g npm
.
J'ai mis à jour vers la version 5.4.2 (npm --version
), supprimé React Native avec npm remove --save react-native
et réinstallé RN avec npm i --save react-native
. Cela a résolu le problème pour moi.
(Comme alternative, vous voudrez peut-être essayer le fil au lieu de npm.)