Ich habe gerade node.js & cli installiert
installierte react-native-cli
npm -g react-native-cli
Und ein 'neues Projekt' erstellt.
react-native init new_project
und in diesem 'new_project'-Verzeichnis war ich müde zu sehen, ob der Metro Bundler gut funktioniert.
react-native start
Aber der Befehl gab mir folgenden Fehler und die U-Bahn startet nicht. Irgendwelche Hinweise zur Behebung dieses Fehlers? (Ich verwende Windows 10 OS.)
C:\projects\new_proj>react-native start
fehler Ungültiger regulärer Ausdruck: /(.\fixtures.|node_modules[‹react[‹dist[‹.|website\node_modules.|heapCapture\bundle.js|.\tests.)$/: Nicht terminierte Zeichenklasse. Führen Sie die CLI mit dem Flag --verbose aus, um weitere Informationen zu erhalten. SyntaxError: Ungültiger regulärer Ausdruck: /(.\fixtures.|node_modules[‹react[‹dist[‹.|website\node_modules.|heapCapture\bundle.js|.\tests.)$/: Nicht terminierte Zeichenklasse bei neuem RegExp ( ) bei Blacklist (D:\projects\new_proj\node_modules\metro-config\src\defaults\blacklist.js: 34: 10) bei getBlacklistRE (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native -community\cli\build\tools\loadMetroConfig.js: 69: 59) unter getDefaultConfig (D:\projects\new_proj\knotenmodule\react-native\knotenmodule @ react-native-community\cli\build\tools\loadMetroConfig.js : 85: 20) unter load (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native-community\cli\build\tools\loadMetroConfig.js: 121: 25) unter Object.runServer [as func ] (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native-community\cli\build\command\server\runServer.js: 82: 58) unter Command.handleAction (D:\projects\new_proj\node_modules\react-native\node_modules @ react-native-community\cli\build\cliEntry.js: 160: 21) unter Command.listener (D:\projects\new_proj\node_modules\Commander\index.js: 315: 8) unter Command.emit (events.js: 210: 5) unter Command.parseArgs (D:\projects\new_proj\node_modules\command\index.js: 651: 12)
Ich habe heute zum ersten Mal einen ähnlichen Fehler erhalten. Es erscheint in \node_modules\metro-config\src\defaults\blacklist.js
gibt es einen ungültigen regulären Ausdruck, der geändert werden muss. Ich habe den ersten Ausdruck unter sharedBlacklist
geändert von:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
zu:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Dies wird durch den Knoten v12.11.0 verursacht, da er den regulären Standort dort auf zwei Arten behandelt, um dieses Problem zu lösen
Methode I.
Sie können ein Downgrade auf den Knoten v12.10.0 durchführen. Dadurch wird der richtige Umgang mit Analysefehlern angewendet
Methode II
Sie können den regulären Ausdruck in Ihrem Fall korrekt beenden, indem Sie die Datei a ändern:
\node_modules\metro-config\src\defaults\blacklist.js
Von:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Zu:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Es gibt ein Problem mit Metro bei der Verwendung einiger NPM- und Node - Versionen).
Sie können das Problem beheben, indem Sie Code in der Datei \node_modules\metro-config\src\defaults\blacklist.js
Ändern.
Suchen Sie diese Variable:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
und ändern Sie dies:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Bitte beachten Sie, dass Sie den Code erneut ändern müssen, wenn Sie eine npm-Installation oder eine Garninstallation ausführen.
Sie haben zwei Lösungen:
entweder führen Sie ein Downgrade des Knotens auf V12.10.0 durch, oder Sie können diese Datei für jedes zu erstellende Projekt ändern.
node_modules/metro-config/src/defaults/blacklist.js Ändere dies:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
dazu:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Ich hatte das gleiche Problem, das ich in meinem Projekt mit E:\NodeJS\ReactNativeApp\ExpoTest\node_modules\metro-config\src\defaults\blacklist.js geändert habe
von
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
zu
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
das hat bei mir perfekt funktioniert
Ein PR mit einem Fix wurde im metro Repository zusammengeführt. Jetzt müssen wir nur noch bis zur nächsten Veröffentlichung warten. Im Moment ist die beste Option ein Downgrade auf NodeJS v12.10.0
. Wie Brandon betonte, modifizierte alles in node_modules/
ist eine wirklich schlechte Praxis und wird keine endgültige Lösung sein.
Gehe zu
\ node_modules\metro-config\src\defaults\blacklist.js
und ersetzen Sie diese
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
zu
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Dies ist keine bewährte Methode, und meine Empfehlung lautet: Downgrade der Knotenversion auf 12.9 OR Aktualisieren Sie die Metro-Konfiguration, da sie das Problem Node) beheben.
https://github.com/facebook/metro/issues/45
für diejenigen, die diesen Fehler immer noch ohne offiziellen Patch in React-Native, Expo erhalten
verwenden Sie Garn und fügen Sie diese Einstellung in package.json hinzu
{
...
"resolutions": {
"metro-config": "bluelovers/metro-config-hotfix-0.56.x"
},
...
Beheben Sie das Problem, indem Sie metro-config der neuesten Version (vorerst 0.57.0) installieren. Sie hatten das Problem behoben:
npm install metro-config
sie können es später entfernen, nachdem reaktionsnative Leute die Modulversionen aktualisiert haben
In der Regel ändere ich keine Dateien in node_modules/
(oder alles, was nicht als Teil eines Repositorys festgeschrieben wird), wenn sie beim nächsten Bereinigen, Erstellen oder Aktualisieren zurückgeführt werden. Ich habe es definitiv in der Vergangenheit getan und es hat mich ein paar Mal gebissen. Dies funktioniert jedoch als kurzfristiger/lokaler Entwickler-Fix, bis/es sei denn, metro-config
ist aktualisiert.
Vielen Dank!
Unter Windows 10 empfehle ich dringend, Linux Bash Shell zu installieren.
Hier ist eine nette Anleitung zum Einrichten: https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-Shell-on-windows-10/
befolgen Sie einfach die Schritte, wählen Sie Ihre Linux-Distribution aus und vermeiden Sie so viel Arbeit wie möglich mit Node on Cmd, da dies offensichtlich instabil ist.
Beachten Sie, dass Microsoft dringend davor warnt, Linux-Dateien mit Windows-Software hinzuzufügen oder zu ändern, wie hier beschrieben: howtogeek.com/261383/how-to-access-your-ubuntu-bash-files-in-windows-and- your-windows-system-drive-in-bash /
Ich hoffe es hilft!
Ich fand die regexp.source geändert von node v12.11.0
, vielleicht das neue v8
Motor verursacht. Weitere Informationen finden Sie unter 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[\\\\\\].*'
>
Gehen Sie zu node_modules in Ihrem Projektverzeichnis, suchen Sie nach metro-config\src\defaults\blacklist.js und ändern Sie das var blacklist: = {....}
bis
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Sie können gehen zu ...
\ node_modules\metro-config\src\defaults\blacklist.js und ändern ...
var sharedBlacklist = [ /node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/, /heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/ ];
dafür:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Die Verwendung von Garn verhindert diese Situation. Garn sollte verwenden
Ich habe gerade package.json aktualisiert, um von zu ändern
"react-native": "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz"
zu
"react-native": "https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz"
Es scheint, dass das Problem in sdk-36 nicht auftreten wird !!
Meine Knotenversion ist v12.16. und os ist win1.