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

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

    • установлен 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.)

    • команда: C:\projects\new_proj>react-native start

      error Недопустимое регулярное выражение: /(.\fixtures.|node_modules[ptingreact[ptingdist[]] .|website\node_modules.|heapCapture\bundle.js|.\tests.)$/: Неопределенный класс символов. Для получения более подробной информации запустите CLI с флагом --verbose. SyntaxError: недопустимое регулярное выражение: /(.\fixtures.|node_modules следующим образом: /(.\fixtures.|node_modules[ptingreact[ ]dist[]] .|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 \ response-native \ node_modules @ react-native-community \ cli \ build \ tools \ loadMetroConfig.js : 85: 20) при нагрузке (D:

Песня Кевина
источник
Как они заявили. Run CLI with --verbose flag for more details.Возможно, вы забыли избежать обратной косой черты. См. Stackoverflow.com/questions/14639339/… . Не могу сказать без подробностей.
rhand
На всякий случай, если metro-config не существует в node_modules для вас, проверьте мой ответ ниже.
gprathour

Ответы:

253

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

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__\/.*/
];
Клем
источник
1
Большое спасибо! Я внес изменения, как вы сказали, и теперь это работает. Нужно ли мне изменять это в каждом проекте или есть способ применить это глобально?
Песня Кевина
11
Получил другой ответ на запрос на Github. - «Это вызвано узлом v12.11.0, переход на версию 12.10.0 решит эту проблему». Это было от Лео Лея. И еще мне нужно посмотреть, работает это или нет.
Песня Кевина
3
Отличное исправление! Большое спасибо. React Native кажется такой глючной поездкой, от поврежденного кеша npm до ошибок PERM. На установку у меня ушло два дня.
EdNdee 01
4
/node_modules[\/\ providedreact[\/\ provideddist[\/\ provided.*/, просто эту строку нужно изменить
vivek
1
Большое спасибо! Это сэкономит мне много времени. Я только что обновил свой Node.js с v8.xx до v12.13.0 этой ночью, а затем эта ошибка внезапно приводит к сбою запуска приложения ... не знал, что это вызвано этой ошибкой без этого сообщения ...
garykwwong
108

Это вызвано узлом 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__\/.*/
];

Кому:

 var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];
Чарльз
источник
2
это очень полезно, не могли бы вы отправить запрос на перенос? к metro-configили expo-cli?
its4zahoor 07
1
Запрос на
перенос
20

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

Есть проблема с 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, вам нужно снова изменить код.

Хавьер К.
источник
Разве эту проблему не могут решить разработчики? Каждый раз я прихожу сюда. Спасибо, сэр
Хасан Басри
1
Да, проблему могут решить разработчики метро, ​​внесшие эти изменения.
Javier C.
2
Спасибо! Это исправлено!
Роберт
Не думаю, что это хорошее решение. изменение файлов внутри node_modules
CodeMind
1
Обратите внимание, что если вы используете старую версию react-native (например, 0.51.0), файл, который нужно изменить, находится по адресу:.\node_modules\metro-bundler\src\blacklist.js
Venryx
20

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

либо вы понижаете версию узла до 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__\/.*/
];
Хасан Захран
источник
8

У меня была та же проблема, что я изменил 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__\/.*/
];

к

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

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

Nelajala Nelajala
источник
6

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

Я обнаружил, что в довольно старом проекте нет metro-configin 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__\/.*/
];

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

редактировать

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

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

gprathour
источник
1
Помогло, но файл в моем 360 init находится в формате MyProject\node_modules\metro\src\blacklist.js. Приветствия.
Beltrone
5

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

JoseLion
источник
4

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

"ошибка Недопустимое регулярное выражение: / (. \ fixtures \. | node_modules [\] react [\] dist [\]. | website \ node_modules \. | heapCapture \ bundle.js |. \ tests \. ) $ /: Unterminated класс персонажа ".

Измените регулярное выражение в \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__\/.*/
];

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

Мишан Мадхупа
источник
3

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

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

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

{
  ...
  "resolutions": {
    "metro-config": "bluelovers/metro-config-hotfix-0.56.x"
  },
 ...
голубые любовники
источник
2

Перейти к

\ node_modules \ МЕТРО-конфигурации \ 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__\/.*/
];

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

Лахиру Амаратундж
источник
1

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

\ 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__\/.*/
];
Леонель Велиз Апонте
источник
0

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

Спасибо!

Брэндон Гохсман
источник
0

Я обнаружил, что 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[\\\\\\].*'
>
Дунхуа Лю
источник
0

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

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

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

KEMBL
источник
Мне это не помогает.
Велизар Андреев Китанов
0

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

Gucal
источник
0

В 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- системный диск в баше /

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

Avatazjoe
источник
0

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

"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"

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

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

Энсон
источник
0

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

Обратите внимание: если вы запустите 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__\/.*/
];

Кому:

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

Maycon Mesquita
источник