"React-native start" taki hata nasıl çözülür?


117
  1. Node.js ve cli'yi yeni yükledim

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

      npm -g react-native-cli
  2. Ve bir 'yeni proje' yarattı.

    react-native init new_project
  3. ve bu 'new_project' dizininin içinde, metro paketleyicisinin iyi çalışıp çalışmadığını görmekten yoruldum.

    react-native start
  4. Ancak komut bana aşağıdaki hatayı verdi ve metro başlamıyor. Bu hatayı düzeltmek için herhangi bir ipucu var mı? (Windows 10 OS kullanıyorum.)

    • komut: C:\projects\new_proj>react-native start

      hata Geçersiz normal ifade: /(.\fixtures.|node_modules[]react[]dist[].|website\node_modules.|heapCapture\bundle.js|.\tests.)$/: Sonlandırılmamış karakter sınıfı. Daha fazla ayrıntı için CLI'yi --verbose bayrağıyla çalıştırın. SyntaxError: Geçersiz normal ifade: /(.\fixtures.|node_modules[]react[]dist[].|website\node_modules.|heapCapture\bundle.js|.\tests.)$/: Yeni RegExp'de sonlandırılmamış karakter sınıfı ( ) kara listede (D: \ projects \ new_proj \ node_modules \ metro-config \ src \ defaults \ blacklist.js: 34: 10) getBlacklistRE'de (D: \ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native -community \ cli \ build \ tools \ loadMetroConfig.js: 69: 59) getDefaultConfig'de (D: \ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native-community \ cli \ build \ tools \ loadMetroConfig.js) : 85: 20) yükte (D:


Dedikleri gibi Run CLI with --verbose flag for more details.Belki de ters eğik çizgiden kaçmayı unuttunuz. Bkz stackoverflow.com/questions/14639339/... . Daha fazla ayrıntı olmadan söyleyemem.
rhand

Metro-config'in sizin için node_modules'te mevcut olmaması durumunda, aşağıdaki cevabımı kontrol edin.
gprathour

Yanıtlar:


251

Bugün ilk kez benzer bir hata aldım. Görünüyor \node_modules\metro-config\src\defaults\blacklist.js, değiştirilmesi gereken geçersiz bir normal ifade var. İlk ifadeyi şundan değiştirdim sharedBlacklist:

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

için:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

1
Çok teşekkür ederim! Dediğin gibi değişiklikler yaptım ve şimdi çalışıyor. Bunu her projede değiştirmem gerekiyor mu yoksa bunu küresel olarak uygulamanın bir yolu var mı?
Song Kevin

11
Github'daki sorgudan başka bir yanıt aldım. - 'Buna v12.11.0 düğümünden kaynaklanıyor, v12.10.0'a düşürmek sorunu çözecektir.' Leo.Lei'den. Ayrıca çalışıp çalışmadığını da görmem gerekiyor.
Şarkı Kevin

3
Mükemmel düzeltme! Çok teşekkürler. React Native, bozuk npm önbelleğinden PERM hatalarına kadar buggy sürüşü gibi görünüyor. Sadece yüklemem iki günümü aldı.
EdNdee

4
/node_modules[\/\]react[\/\]dist[\/\].*/, Sadece bu satırın değiştirilmesi gerekiyor
vivek

1
Çok teşekkürler! Bana çok zaman kazandırdı. Node.js'mi bu gece v8.xx'den v12.13.0'a yükselttim ve sonra aniden uygulama başlatma hatasına yol açan bu hata ... bu hatanın nedeninin bu yazı olmadan farkında değildim ...
garykwwong

108

Bu, normal konumu ele alma biçiminden dolayı v12.11.0 düğümünden kaynaklanır, bu sorunu çözmenin iki yolu vardır

Yöntem I

V12.10.0 düğümüne geçebilirsiniz, bu, ayrıştırma hatasıyla başa çıkmak için doğru yolu uygular

Yöntem II

Normal ifadeyi, sizin durumunuzda, a:

\node_modules\metro-config\src\defaults\blacklist.js

Gönderen:

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

Kime:

 var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

2
bu çok faydalı, siz bir çekme isteği gönderemez misiniz? için metro-configya expo-cli?
its4zahoor

1
Ekim ayında bir geri çekme isteği gönderildi: github.com/facebook/metro/commit/…
schellack

Teşekkürler, çok yardımcı oldu
Tarun Gupta

20

[Hızlı cevap]

Bazı NPM ve Node sürümlerini kullanan Metro ile ilgili bir sorun var.

Dosyadaki bazı kodları değiştirerek sorunu çözebilirsiniz \node_modules\metro-config\src\defaults\blacklist.js.

Bu değişkeni ara:

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

ve buna değiştirin:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

Bir npm kurulumu veya bir iplik kurulumu çalıştırırsanız, kodu yeniden değiştirmeniz gerektiğini lütfen unutmayın.


Bu sorun geliştiriciler tarafından çözülemez mi? Buraya her geldiğimde. Teşekkürler Efendim
Hasan Basri

1
Evet, sorun, bu değişiklikleri yapan metro geliştiricileri tarafından çözülebilir.
Javier C.

2
Teşekkür ederim! Bu onu düzeltti!
Robert

Bunun iyi bir çözüm olduğunu sanmıyorum. node_modules içindeki dosyaları değiştirme
CodeMind

1
React-native'nin eski bir sürümünü kullanıyorsanız (ör. 0.51.0), değiştirilecek dosyanın şu adresten olduğunu unutmayın:.\node_modules\metro-bundler\src\blacklist.js
Venryx

20

İki çözümünüz var:

Ya düğümü V12.10.0'a düşürürsünüz ya da oluşturacağınız her proje için bu dosyayı değiştirebilirsiniz.

node_modules / metro-config / src / defaults / blacklist.js Bunu değiştirin:

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

buna:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

8

Projemde E: \ NodeJS \ ReactNativeApp \ ExpoTest \ node_modules \ metro-config \ src \ defaults \ blacklist.js'yi değiştirdiğimde aynı sorunu yaşadım

itibaren

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
 /heapCapture\/bundle\.js/,
 /.*\/__tests__\/.*/
];

için

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

bu benim için mükemmel çalıştı


5

Metro havuzunda düzeltmeye sahip bir PR birleştirildi . Şimdi bir sonraki sürüme kadar beklememiz gerekiyor. Şimdilik en iyi seçenek NodeJS'ye geçmektir . Brandon'ın işaret ettiği gibi , herhangi bir şeyi değiştirmek gerçekten kötü bir uygulamadır ve nihai bir çözüm olmayacaktır.v12.10.0node_modules/


5

Projemde metro-config yok, şimdi ne olacak?

Oldukça eski bir projede hiç metro-configin olmadığını buldum node_modules. Seninle de böyleyse, o zaman,

Node_modules / metro-bundler / src / blacklist.js'ye gidin

Ve diğer yanıtlarda belirtildiği gibi aynı adımı uygulayın.

değiştirmek

var sharedBlacklist = [
    /node_modules[/\\]react[/\\]dist[/\\].*/,
    /website\/node_modules\/.*/,
    /heapCapture\/bundle\.js/,
    /.*\/__tests__\/.*/
];

ile

var sharedBlacklist = [
    /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
    /website\/node_modules\/.*/,
    /heapCapture\/bundle\.js/,
    /.*\/__tests__\/.*/
];

Not: Aynı durumla birkaç projede karşılaştım, bu yüzden paylaşmanın birine yardımcı olabileceğini düşündüm.

Düzenle

@Beltrone tarafından yapılan yoruma göre, dosya şu konumlarda da bulunabilir:

node_modules \ metro \ src \ blacklist.js


1
Yardım ettim ama 360 init'imdeki dosya içeride MyProject\node_modules\metro\src\blacklist.js. Şerefe.
beltrone

4

Bende de aynı sorun var.

"hata Geçersiz normal ifade: / (. \ fikstürler \. | node_modules [\] react [\] dist [\]. | website \ node_modules \. | heapCapture \ bundle.js |. \ testler \. ) $ /: Sonlandırılmamış karakter sınıfı. "

İçindeki normal ifadeyi değiştirin \node_modules\metro-config\src\defaults\blacklist.js

itibaren

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

için

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

Bu değişiklik hatamı çözdü.



2

Git

\ Node_modules \ metro-config \ src \ varsayılanları \ blacklist.js

ve bunu değiştir

var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];

için

var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];

Bu bir en iyi uygulama değildir ve benim tavsiyem şudur: Düğüm sürümünü 12.9'a indirin VEYA metro-config'i Düğüm sorununu düzelttikleri için güncelleyin.


1

Gidebilirsin...

\ node_modules \ metro-config \ src \ defaults \ blacklist.js ve değiştirin ...

var sharedBlacklist = [   /node_modules[/\\]react[/\\]dist[/\\].*/,  
/website\/node_modules\/.*/,   /heapCapture\/bundle\.js/,  
/.*\/__tests__\/.*/ ];

bunun için:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

0

Genel bir kural node_modules/olarak, bir sonraki temizleme, derleme veya güncelleme onları geri yükleyeceği için içindeki dosyaları (veya bir deponun parçası olarak işlenmeyen herhangi bir şeyi) değiştirmem . Bunu kesinlikle geçmişte yaptım ve birkaç kez ısırdı beni. Ancak bu metro-config, güncellenene kadar / güncellenene kadar kısa vadeli / yerel bir geliştirme düzeltmesi olarak çalışır .

Teşekkürler!


0

Regexp.source öğesinin değiştiğini buldum node v12.11.0, belki yeni v8motor neden olmuştur. https://github.com/nodejs/node/releases/tag/v12.11.0 adresinde daha fazlasını görün .

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

En son sürümün metro-config'i yükleyerek düzeltin (şimdilik 0.57.0), sorunu çözdüler:

npm metro-yapılandırmasını yükle

react-native adamlar modül sürümlerini güncelledikten sonra daha sonra kaldırabilirsiniz


Bu bana yardımcı olmuyor.
Velizar Andreev Kitanov

0

İplik kullanımı bu durumu engeller. İplik kullanmalı


0

Windows 10'da Linux Bash Shell'i kurmanızı şiddetle tavsiye ederim.

İşte onu kurmak için güzel bir rehber: https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/

sadece adımları izleyin, linux dağıtımınızı seçin ve bariz kararsızlık nedeniyle cmd üzerinde düğüm ile çalışmaktan mümkün olduğunca kaçının.

Dikkate alın Microsoft, burada açıklandığı gibi, Windows yazılımı ile Linux dosyaları eklemeye veya değiştirmeye karşı şiddetle uyarır: howtogeek.com/261383/how-to-access-your-ubuntu-bash-files-in-windows-and-your-windows- sistem drive-in-bash /

Umarım yardımcı olur!


0

Paketini değiştirmek için sadece package.json'u güncelledim

"react-native": "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz"

için

"react-native": "https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz"

Görünüşe göre sdk-36'da sorun oluşmayacak !!

Düğüm sürümüm v12.16.0 ve işletim sistemi win10 .


0

Çözüm basit ama geçicidir ...

Bir npm installveya a çalıştırırsanız yarn installkodu yeniden değiştirmeniz gerektiğini unutmayın!

Peki bunu otomatik olarak nasıl çalıştırabiliriz?

Kalıcı çözüm

Düğüm modüllerinizi kurduktan sonra bunu "otomatik olarak" yapmak için kullanabilirsiniz patch-package.

  1. metro-configHatayı çözerek dosyayı düzeltin :

Dosya içinde görünür \node_modules\metro-config\src\defaults\blacklist.js.

Şuradan düzenle:

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

Kime:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];
  1. Ardından kalıcı bir yama dosyası oluşturun:

npx patch-package metro-config

  1. Senin içinde package.jsontetikleyici yama:
"scripts": {
+  "postinstall": "npx patch-package"
}

Hepsi tamam! Şimdi bu yama her npm install/ yarn install.

Https://github.com/ds300/patch-package teşekkürler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.