web-dev-qa-db-de.com

So beheben Sie den Fehler beim "reaktionsnativen Start"

  1. Ich habe gerade node.js & cli installiert

    • installierte node.js
    • installierte react-native-cli

      npm -g react-native-cli
      
  2. Und ein 'neues Projekt' erstellt.

    react-native init new_project
    
  3. und in diesem 'new_project'-Verzeichnis war ich müde zu sehen, ob der Metro Bundler gut funktioniert.

    react-native start
    
  4. Aber der Befehl gab mir folgenden Fehler und die U-Bahn startet nicht. Irgendwelche Hinweise zur Behebung dieses Fehlers? (Ich verwende Windows 10 OS.)

    • befehl : 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)

99
Song Kevin

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__\/.*/
];
215
Clem

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__\/.*/
];
86
Charles

[Schnelle Antwort]

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.

17
Javier C.

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__\/.*/
];
12
Hasan Zahran

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

8

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.

3
JoseLion

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.

1

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"
  },
 ...
1
bluelovers

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

0
KEMBL

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!

0
Brandon Gohsman

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!

0
Avatazjoe

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[\\\\\\].*'
>
0
Donghua Liu

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__\/.*/
];
0
NC Armstrong

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__\/.*/
];
0

Die Verwendung von Garn verhindert diese Situation. Garn sollte verwenden

0
Gucal

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.

0
anson