Как устранить ошибку при запуске с реактивным запуском

  1. Я только что установил node.js и cli

    • installed node.js
    • установлен react-native-cli

      npm -g react-native-cli
      
  2. И создал «новый проект».

    react-native init new_project
    
  3. и внутри этого каталога 'new_project' я устал проверять, хорошо ли работает сборщик метро.

    react-native start
    
  4. Но команда дала мне следующую ошибку, и метро не запускается. Есть ключ к исправлению этой ошибки? (Я использую ОС Windows 10.)

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

      error Недопустимое регулярное выражение: /(.\fixtures.|node_modules следующим образом: /(.\fixtures.|node_modules[ptingreact[ократичность]] .|website\node_modules.|heapCapture\bundle.js|.\tests.)$/: Незавершенный класс символов. Для получения более подробной информации запустите CLI с флагом --verbose. SyntaxError: Недопустимое регулярное выражение: /(.\fixtures.|node_modules следующим образом: /(.\fixtures.|node_modules[ократичесчеткорекурсивизучестива) .|website\node_modules.|heapCapture\bundle.js|.\tests.)$/: незавершенный класс символов в новом RegExp ( ) в черном списке (D: \ projects \ new_proj \ node_modules \ metro-config \ src \ defaults \ blacklist.js: 34: 10) в getBlacklistRE (D: \ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native -community \ cli \ build \ tools \ loadMetroConfig.js: 69: 59) в getDefaultConfig (D: \ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native-community \ cli \ build \ tools \ loadMetroConfig.js : 85: 20) при загрузке (D: \ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native-community \ cli \ build \ tools \ loadMetroConfig.js: 121: 25) в Object.runServer [as func ] (D: \ projects \ new_proj \ node_modules \ react-native \ node_modules @ response-native-community \ cli \ build \ commands \ server \ runServer.js: 82: 58) в Command.handleAction (D: \ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native-community \ cli \ build \ cl iEntry.js: 160: 21) в Command.listener (D: \ projects \ new_proj \ node_modules \ commander \ index.js: 315: 8) в Command.emit (events.js: 210: 5) в Command.parseArgs ( D: \ projects \ new_proj \ node_modules \ commander \ index.js: 651: 12)


person Song Kevin    schedule 26.09.2019    source источник
comment
Как они заявили Run CLI with --verbose flag for more details. Возможно, вы забыли избежать обратной косой черты. См. stackoverflow.com/questions/14639339/. Не могу сказать без подробностей.   -  person rhand    schedule 28.09.2019
comment
На всякий случай, если metro-config не существует в node_modules для вас, проверьте мой ответ ниже.   -  person gprathour    schedule 16.05.2020


Ответы (21)


У меня сегодня впервые возникла подобная ошибка. Он появляется в \node_modules\metro-config\src\defaults\blacklist.js, есть недопустимое регулярное выражение, которое необходимо изменить. Я изменил первое выражение в sharedBlacklist с:

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

to:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];
person Clem    schedule 26.09.2019
comment
Большое спасибо! Я внес изменения, как вы сказали, и теперь это работает. Нужно ли мне изменять это в каждом проекте или есть способ применить это глобально? - person Song Kevin; 27.09.2019
comment
Спасибо много! все работало нормально. Не могли бы вы объяснить причину? - person akio an; 27.09.2019
comment
Это тоже решает мою проблему, но я понимаю, почему это произошло, кто-то знает почему? - person Lucas Fontes Gaspareto; 27.09.2019
comment
Получил другой ответ на запрос на Github. - «Это вызвано узлом v12.11.0, переход на версию 12.10.0 решит эту проблему». Это было от Лео Лея. И еще мне нужно посмотреть, работает это или нет. - person Song Kevin; 29.09.2019
comment
Отличное исправление! Большое спасибо. React Native кажется такой глючной поездкой, от поврежденного кеша npm до ошибок PERM. На установку у меня ушло два дня. - person EdNdee; 01.10.2019
comment
/node_modules[\/\ghtreact[\/\ provideddist[\/\ght.*/, только эту строку нужно изменить - person vivek; 03.11.2019
comment
Большое спасибо! Это сэкономит мне много времени. Я только что обновил свой Node.js с версии v8.x.x. до v12.13.0 этой ночью, а затем эта ошибка внезапно приводит к сбою запуска приложения ... не знал, что это вызвано этой ошибкой без этого сообщения ... - person garykwwong; 09.11.2019
comment
У меня есть var sharedBlacklist = [/node_modules\/react\/dist\/.*/, /website\/node_modules\/.*/, /heapCapture\/bundle\.js/, /.*\/__tests__\/. * /]; как это, все еще не работает. - person sanjeev shetty; 30.04.2020
comment
После выполнения этого я получаю сообщение об ошибке: error: unknown option '--assetPlugins' Процесс Metro Bundler завершился с кодом 1 Ошибка: процесс Metro Bundler завершился с кодом 1 в ChildProcess (/ @ expo/[email protected]/src/ Project.js: 1918: 16) ..... моя версия jest- expo - 36.0.1, а моя собственная версия для реакции - версия expo - 36.0.0 - person aspiringsomeone; 19.06.2020
comment
Работает как шарм. Спасибо. - person Louay Sleman; 23.09.2020

Это вызвано узлом v12.11.0 из-за того, что он имеет регулярное местоположение, есть два способа решить эту проблему.

Метод I

Вы можете перейти на узел v12.10.0, это применит правильный способ борьбы с ошибкой синтаксического анализа.

Метод II.

Вы можете правильно завершить регулярное выражение в вашем случае, изменив файл, расположенный по адресу:

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

Из:

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

To:

 var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];
person Charles    schedule 02.10.2019
comment
это очень полезно, не могли бы вы отправить запрос на перенос? в metro-config или expo-cli? - person its4zahoor; 07.12.2019
comment
Запрос на перенос был отправлен еще в октябре: github.com/facebook/metro/commit/ - person schellack; 19.12.2019
comment
ты можешь мне это объяснить? - person Ragul Cs; 28.09.2020
comment
@schellack какая версия React-native может решить эту ошибку? - person Mighty; 25.03.2021

[Быстрый ответ]

Есть проблема с Metro, использующим некоторые версии NPM и Node.

Вы можете решить проблему, изменив код в файле \node_modules\metro-config\src\defaults\blacklist.js.

Найдите эту переменную:

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

Обратите внимание, что если вы запускаете npm install или yarn install, вам нужно снова изменить код.

person Javier C.    schedule 11.11.2019
comment
Разве эту проблему не могут решить разработчики? Каждый раз я прихожу сюда. Спасибо, сэр - person Hasan Basri; 28.11.2019
comment
Да, проблему могут решить разработчики метро, ​​внесшие эти изменения. - person Javier C.; 28.11.2019
comment
Спасибо! Это исправлено! - person Robert; 07.12.2019
comment
Не думаю, что это хорошее решение. изменение файлов внутри node_modules - person CodeMind; 21.05.2020
comment
Обратите внимание, что если вы используете старую версию response-native (например, 0.51.0), файл, который нужно изменить, находится по адресу: .\node_modules\metro-bundler\src\blacklist.js - person Venryx; 22.05.2020

У вас есть два решения:

либо вы понижаете версию узла до версии V12.10.0, либо можете изменять этот файл для каждого создаваемого проекта.

node_modules / metro-config / src / defaults / blacklist.js Измените это:

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

Это связано с несоответствием конфигурации файла черного списка.

Чтобы решить эту проблему,

  1. Нам нужно перейти в папку проекта.

  2. Открыть \node_modules\metro-config\src\defaults\blacklist.js

  3. Замените следующее.

Из

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

To

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];
person Codemaker    schedule 25.12.2020
comment
Оно работает!! Проблема полностью решена только с этим фрагментом кода ‹3 - person Francesco Orsi; 10.01.2021

В моем проекте нет metro-config, что теперь?

Я обнаружил, что в довольно старом проекте нет metro-config в node_modules. Если это так, то

Перейдите в node_modules / metro-bundler / src / blacklist.js

И сделайте тот же шаг, что и в других ответах, т.е.

Заменять

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

P.S. Я столкнулся с такой же ситуацией в паре проектов, поэтому подумал, что поделиться ею может кому-то помочь.

Изменить

Согласно комментарию @beltrone файл также может существовать,

node_modules \ метро \ SRC \ blacklist.js

person gprathour    schedule 15.05.2020
comment
Помогло, но файл в моем 360 init находится в MyProject\node_modules\metro\src\blacklist.js. Ваше здоровье. - person beltrone; 27.05.2020
comment
мне это было полезно. Спасибо - person Alejandro Gonzalez; 16.06.2021

У меня такая же проблема.

error Неверное регулярное выражение: /(.\< sizesfixtures \. | node_modules [\] response [\] dist [\]. | website \ node_modules \. < /em>|heapCapture\bundle.js|.\< sizestests \.) $ /: Неограниченный класс символов.

Измените регулярное выражение в \node_modules\metro-config\src\defaults\blacklist.js

От

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

Это изменение устранило мою ошибку.

person Mishan Madhupa    schedule 22.07.2020

У меня была та же проблема, что я изменил E: \ NodeJS \ ReactNativeApp \ ExpoTest \ node_modules \ metro-config \ src \ defaults \ blacklist.js в моем проекте

из

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

to

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

это отлично сработало для меня

person nelajala nelajala    schedule 07.11.2019

PR с исправлением был объединен в metro репозиторий. Теперь нам просто нужно дождаться следующего релиза. На данный момент лучший вариант - перейти на NodeJS v12.10.0. Как отметил Брэндон, изменение чего-либо в node_modules/ является действительно плохой практикой и не будет окончательным решением.

person JoseLion    schedule 30.10.2019

Решение простое, но временное ...

Обратите внимание: если вы запустите npm install или yarn install, вам нужно снова изменить код!

Итак, как мы можем запустить это автоматически?

Постоянное решение

Чтобы сделать это «автоматически» после установки ваших узловых модулей, вы можете использовать patch-package.

  1. Исправляем metro-config файл, устраняя ошибку:

Файл появится в \node_modules\metro-config\src\defaults\blacklist.js.

Редактировать с:

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

To:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];
  1. Затем сгенерируйте постоянный файл патча:

npx patch-package metro-config

  1. В вашем package.json запустите патч:
"scripts": {
+  "postinstall": "npx patch-package"
}

Готово! Теперь этот патч будет производиться каждые npm install / yarn install.

Благодаря https://github.com/ds300/patch-package

person Maycon Mesquita    schedule 22.05.2020
comment
Это наиболее разумный ответ. Спасибо. - person ridvanaltun; 04.07.2021

https://github.com/facebook/metro/issues/453

для тех, кто все еще получает эту ошибку без официального патча в react-native, expo

используйте пряжу и добавьте этот параметр в package.json

{
  ...
  "resolutions": {
    "metro-config": "bluelovers/metro-config-hotfix-0.56.x"
  },
 ...
person bluelovers    schedule 24.12.2019

Go to

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

и замените это

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

to

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

Это не лучшая практика, и я рекомендую: понизить версию узла до 12.9 ИЛИ обновить конфигурацию metro-config, поскольку они устраняют проблему с узлом.

person Lahiru Amarathunge    schedule 10.12.2019

Ты можешь пойти в...

\ node_modules \ metro-config \ src \ defaults \ blacklist.js и измените ...

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__\/.*/
];
person Leonel Veliz Aponte    schedule 05.11.2019

Я только что обновил package.json, чтобы изменить его

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

to

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

Кажется, проблема не возникает в sdk-36 !!

Моя версия узла - v12.16.0, а ОС - win10.

person anson    schedule 01.04.2020

Как правило, я не изменяю файлы внутри node_modules/ (или чего-либо, что не фиксируется как часть репозитория), поскольку следующая чистка, сборка или обновление их регрессируют. Я определенно поступал так в прошлом, и это пару раз укусило меня. Но это действительно работает как краткосрочное / локальное исправление для разработчиков до тех пор, пока не будет обновлен metro-config.

Спасибо!

person Brandon Gohsman    schedule 25.10.2019

Я обнаружил, что regexp.source изменен с node v12.11.0, возможно, это вызвано новым v8 движком. подробнее см. https://github.com/nodejs/node/releases/tag/v12.11.0.

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

Исправьте это, установив metro-config последней версии (на данный момент 0.57.0), они исправили проблему:

npm установить metro-config

вы можете удалить его позже, после того, как ребята из React-native обновят версии модулей

person KEMBL    schedule 07.11.2019
comment
Мне это не помогает. - person Velizar Andreev Kitanov; 16.12.2019

Использование пряжи предотвращает эту ситуацию. Пряжу следует использовать

person Gucal    schedule 17.12.2019

В Windows 10 я настоятельно рекомендую установить Linux Bash Shell.

Вот хорошее руководство по его настройке: https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/

просто следуйте инструкциям, выберите свой дистрибутив Linux и по возможности избегайте работы с node на cmd из-за очевидной нестабильности.

Примите во внимание, что Microsoft настоятельно рекомендует не добавлять или изменять файлы Linux с помощью программного обеспечения Windows, как описано здесь: howtogeek.com/261383/how-to-access-your-ubuntu-bash-files-in-windows -and-your-windows-system-drive-in-bash /

Надеюсь, это поможет!

person Avatazjoe    schedule 20.01.2020

Все упомянутые выше комментарии великолепны, они разделяют путь, который работал со мной для этого файла черного списка, который необходимо отредактировать:

Имя вашего проекта \ node_modules \ metro-bundler \ src Имя файла blacklist.js

person HassanSh__3571619    schedule 07.09.2020

Сегодня я столкнулся именно с этой проблемой, но ни один из приведенных выше ответов не был применим для меня, поскольку локальное изменение / исправление node_modules или добавление разрешений, обрабатываемых только пряжей, никогда не будет для меня решением, будь то краткосрочное или что-то еще.

Неудивительно, что package.json просто нужно было получить несколько обновленных версий зависимостей, поэтому я нажал cli, перешел в каталог проекта, где находился package.json, и эти строки выполнили свою работу:

  • npm install -g npm-check-updates
  • ncu -u
  • npm install

Первая строка глобально устанавливает инструмент, который просто перечисляет все (dev-) зависимости, предоставляемые package.json, которые вы можете обновить. Вторая команда автоматически адаптирует номера версий в package.json. Последняя строка переустанавливает модули node - также можно использовать yarn вместо npm install.

Теперь react-native работает должным образом.

person Javatheist    schedule 21.03.2021