Je viens d'installer node.js & cli
installé react-native-cli
npm -g react-native-cli
Et créé un "nouveau projet".
react-native init new_project
et dans ce répertoire 'new_project', je suis fatigué de voir si le bundler metro fonctionne bien.
react-native start
Mais la commande m'a donné l'erreur suivante et metro ne démarre pas. Un indice pour corriger cette erreur? (J'utilise Windows 10 OS.)
C:\projects\new_proj>react-native start
erreur Expression régulière non valide: /(.\fixtures.|node_modules} diplomatiqueréponse____________________________________________________________________________________ site Web .node_modules.|heapCapture\bundle.js|.\tests.)$/: classe de caractères non terminée. Exécutez CLI avec l'indicateur --verbose pour plus de détails. SyntaxError: Expression rationnelle non valide: /(.\fixtures.|node_modules} diplomereactoramaddistribution diplomatique .|website\node_modules.|heapCapture\bundle.js |. ) sur liste noire (D:\projects\new_proj\node_modules\metro-config\src\defaults\blacklist.js: 34: 10) sur getBlacklistRE (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native -community\cli\build\tools\loadMetroConfig.js: 69: 59) sur getDefaultConfig (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native-community\cli\build\tools\loadMetroConfig.js : 85: 20) à la charge (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native-community\cli\build\tools\loadMetroConfig.js: 121: 25) at Object.runServer [as func ] (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native-community\cli\build\commands\server\runServer.js: 82: 58) sur Command.handleAction (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native-community\cli\build\cliEntry.js: 160: 21) sur Command.listener (D:\projects\new_proj\node_modules\commander\index.js: 315: 8) sur Command.emit (events.js: 210: 5) sur Command.parseArgs (D:\projects\new_proj\node_modules\commander\index.js: 651: 12)
Je viens de recevoir une erreur similaire pour la première fois aujourd'hui. Il apparaît dans \node_modules\metro-config\src\defaults\blacklist.js
, une expression régulière non valide doit être modifiée. J'ai changé la première expression sous sharedBlacklist
de:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
à:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Cela est dû au nœud v12.11.0 en raison de la façon dont il traite l'emplacement normal de deux façons pour résoudre ce problème
Méthode I
Vous pouvez rétrograder vers le nœud v12.10.0, cela appliquera la bonne façon de traiter l'erreur d'analyse
Méthode II
Vous pouvez terminer correctement l'expression régulière dans votre cas en modifiant le fichier situé a:
\node_modules\metro-config\src\defaults\blacklist.js
De:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
À:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Il y a un problème avec Metro utilisant certains NPM et les versions Node.
Vous pouvez résoudre le problème de modification de code dans le fichier \node_modules\metro-config\src\defaults\blacklist.js
.
Recherchez cette variable:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
et passez à ceci:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Veuillez noter que si vous exécutez une installation npm ou une installation de fil, vous devez à nouveau modifier le code.
Vous avez deux solutions:
soit vous rétrogradez le nœud vers la version V12.10.0, soit vous pouvez modifier ce fichier pour chaque projet que vous créerez.
node_modules/metro-config/src/defaults/blacklist.js Modifiez ceci:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
pour ça:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
J'ai eu le même problème que j'ai modifié le E:\NodeJS\ReactNativeApp\ExpoTest\node_modules\metro-config\src\defaults\blacklist.js dans mon projet
de
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
à
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
cela a parfaitement fonctionné pour moi
Un PR avec un correctif a été fusionné dans le référentiel metro . Il ne nous reste plus qu'à attendre la prochaine version. Pour l'instant, la meilleure option est de rétrograder vers NodeJS v12.10.0
. Comme Brandon l'a souligné, en modifiant quoi que ce soit dans node_modules/
est une très mauvaise pratique et ne sera pas une solution définitive.
Aller à
\ node_modules\metro-config\src\defaults\blacklist.js
et remplacez ceci
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
à
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Ce n'est pas une bonne pratique et ma recommandation est la suivante: rétrograder la version du nœud en 12.9 OR mettre à jour metro-config car ils corrigent le problème Node.
https://github.com/facebook/metro/issues/45
pour qui obtient toujours cette erreur sans patch officiel dans react-native, expo
utilisez du fil et ajoutez ce paramètre dans package.json
{
...
"resolutions": {
"metro-config": "bluelovers/metro-config-hotfix-0.56.x"
},
...
Corrigez-le en installant metro-config de la dernière version (0.57.0 pour l'instant), ils avaient résolu le problème:
npm installe metro-config
vous pouvez le supprimer plus tard, après la mise à jour des versions du module de gars natifs
En règle générale, je ne modifie pas les fichiers dans node_modules/
(ou tout ce qui n'est pas validé dans le cadre d'un référentiel) car le prochain nettoyage, build ou mise à jour les régressera. Je l'ai définitivement fait dans le passé et cela m'a mordu plusieurs fois. Mais cela fonctionne comme un correctif de développement local/à court terme jusqu'à/à moins que metro-config
Est mis à jour.
Merci!
Sur Windows 10, je recommande fortement d'installer Linux Bash Shell.
Voici un joli guide pour le configurer: https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-Shell-on-windows-10/
suivez simplement les étapes, choisissez votre distribution linux et évitez autant que possible de travailler avec node sur cmd depuis une instabilité évidente.
Prenez en considération Microsoft met fortement en garde contre l'ajout ou la modification de fichiers Linux avec un logiciel Windows, comme décrit ici: howtogeek.com/261383/how-to-access-your-ubuntu-bash-files-in-windows-and- votre-système-windows-drive-in-bash /
J'espère que ça aide!
J'ai trouvé la regexp.source modifiée de node v12.11.0
, peut-être le nouveau v8
moteur provoqué. voir plus sur https://github.com/nodejs/node/releases/tag/v12.11. .
D:\code\react-native>nvm use 12.10.0
Now using node v12.10.0 (64-bit)
D:\code\react-native>node
Welcome to Node.js v12.10.0.
Type ".help" for more information.
> /node_modules[/\\]react[/\\]dist[/\\].*/.source
'node_modules[\\/\\\\]react[\\/\\\\]dist[\\/\\\\].*'
> /node_modules[/\\]react[/\\]dist[/\\].*/.source.replace(/\//g, path.sep)
'node_modules[\\\\\\\\]react[\\\\\\\\]dist[\\\\\\\\].*'
>
(To exit, press ^C again or ^D or type .exit)
>
D:\code\react-native>nvm use 12.11.0
Now using node v12.11.0 (64-bit)
D:\code\react-native>node
Welcome to Node.js v12.11.0.
Type ".help" for more information.
> /node_modules[/\\]react[/\\]dist[/\\].*/.source
'node_modules[/\\\\]react[/\\\\]dist[/\\\\].*'
> /node_modules[/\\]react[/\\]dist[/\\].*/.source.replace(/\//g, path.sep)
'node_modules[\\\\\\]react[\\\\\\]dist[\\\\\\].*'
>
(To exit, press ^C again or ^D or type .exit)
>
D:\code\react-native>nvm use 12.13.0
Now using node v12.13.0 (64-bit)
D:\code\react-native>node
Welcome to Node.js v12.13.0.
Type ".help" for more information.
> /node_modules[/\\]react[/\\]dist[/\\].*/.source
'node_modules[/\\\\]react[/\\\\]dist[/\\\\].*'
> /node_modules[/\\]react[/\\]dist[/\\].*/.source.replace(/\//g, path.sep)
'node_modules[\\\\\\]react[\\\\\\]dist[\\\\\\].*'
>
(To exit, press ^C again or ^D or type .exit)
>
D:\code\react-native>nvm use 13.3.0
Now using node v13.3.0 (64-bit)
D:\code\react-native>node
Welcome to Node.js v13.3.0.
Type ".help" for more information.
> /node_modules[/\\]react[/\\]dist[/\\].*/.source
'node_modules[/\\\\]react[/\\\\]dist[/\\\\].*'
> /node_modules[/\\]react[/\\]dist[/\\].*/.source.replace(/\//g, path.sep)
'node_modules[\\\\\\]react[\\\\\\]dist[\\\\\\].*'
>
Accédez à node_modules dans votre répertoire de projet, recherchez metro-config\src\defaults\blacklist.js et modifiez le var blacklist: = {....}
à
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Tu peux aller à...
\ node_modules\metro-config\src\defaults\blacklist.js et changez ...
var sharedBlacklist = [ /node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/, /heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/ ];
pour ça:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
L'utilisation de fil empêche cette situation. Le fil doit utiliser
Je viens de mettre à jour package.json pour passer de
"react-native": "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz"
à
"react-native": "https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz"
Il semble que le problème ne se produira pas dans sdk-36 !!
La version de mon nœud est v12.16. et os est win1.