Как устранить ошибку при запуске с реактивным запуском
Я только что установил node.js и cli
- установлен node.js
установлен react-native-cli
npm -g react-native-cli
И создал "новый проект".
react-native init new_project
и внутри этого каталога 'new_project' я устал проверять, хорошо ли работает сборщик метро.
react-native start
Но команда выдала мне следующую ошибку, и метро не запускается. Есть ключ к исправлению этой ошибки? (Я использую ОС 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[ократичесчеткорекурсивизинфизуцифекту.|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:\ projects \ new_proj \ node_modules \ react-native \ node_modules @ response-native-community\cli\build\tools\loadMetroConfig.js:121:25) в Object.runServer [as func] (D:\projects\new_proj\node_modules\response-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@response -native-community\cli\build\cliEntry.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)58) в Command.handleAction (D:\projects\new_proj\node_modules\react-native\node_modules@response-native-community\cli\build\cliEntry.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)58) в Command.handleAction (D:\projects\new_proj\node_modules\react-native\node_modules@response-native-community\cli\build\cliEntry.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)
- команда:
25 ответов
У меня сегодня впервые возникла подобная ошибка. Он появляется в\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__\/.*/
];
Это вызвано узлом 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__\/.*/
];
Это связано с несоответствием конфигурации файла черного списка.
Чтобы решить эту проблему,
Нам нужно перейти в папку проекта.
Открыть
\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__\/.*/
];
[Быстрый ответ]
Есть проблема с 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, вам нужно снова изменить код.
У вас есть два решения:
либо вы понижаете версию узла до 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__\/.*/
];
В моем проекте нет 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__\/.*/
];
PS Я столкнулся с такой же ситуацией в паре проектов, поэтому подумал, что поделиться ею может кому-то помочь.
редактировать
Согласно комментарию @beltrone файл также может существовать,
node_modules \ метро \ SRC \blacklist.js
У меня такая же проблема.
"ошибка Недопустимое регулярное выражение: / (.\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__\/.*/
];
Это изменение устранило мою ошибку.
У меня была та же проблема, что я изменил 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__\/.*/
];
это отлично сработало для меня
Решение простое, но временное...
Обратите внимание, что если вы запустите npm install
или yarn install
вам нужно снова сменить код!
Итак, как мы можем запустить это автоматически?
Постоянное решение
Чтобы сделать это "автоматически" после установки модулей узла, вы можете использовать patch-package
.
- Исправить
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__\/.*/
];
- Затем создайте постоянный файл исправления:
npx patch-packagemetro-config
- В твоем
package.json
запустить патч:
"scripts": {
+ "postinstall": "npx patch-package"
}
Все сделано! Теперь этот патч будет выпускаться каждыйnpm install
/ yarn install
.
В метро репозиторий слили PR с исправлением. Теперь нам просто нужно дождаться следующего релиза. На данный момент лучший вариант - перейти на NodeJS. v12.10.0
. Как Brandon Gohsman, изменяя что-либо вnode_modules/
это действительно плохая практика и не будет окончательным решением.
https://github.com/facebook/metro/issues/453
для тех, кто все еще получает эту ошибку без официального патча в react-native, expo
используйте пряжу и добавьте этот параметр в package.json
{
...
"resolutions": {
"metro-config": "bluelovers/metro-config-hotfix-0.56.x"
},
...
Перейти к
\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__\/.*/
];
Это не лучшая практика, и я рекомендую: понизить версию узла до 12.9 ИЛИ обновить конфигурацию 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__\/.*/
];
I have just update package.json to change from
"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"
It seems that the problem won't occur in sdk-36!!
My node version is v12.16.0 and os is win10.
Сегодня была такая же проблема с проектом, который был построен на старой версии узла, я только что установил узел
v12.9.0
и проблема была решена. я использую
nvm
чтобы легко понизить версию узла.
Исправьте это, установив metro-config последней версии (на данный момент 0.57.0), они устранили проблему:
npm установить metro-config
вы можете удалить его позже, после того, как ребята обновят версии модулей.
Как правило, я не изменяю файлы внутри node_modules/
(или что-либо, что не фиксируется как часть репозитория), поскольку следующая очистка, сборка или обновление их регрессируют. Я определенно делал это в прошлом, и это пару раз укусило меня. Но это действительно работает как краткосрочное / локальное исправление разработчика до тех пор, пока / если metro-config
обновлено.
Спасибо!
Сегодня я столкнулся именно с этой проблемой, но ни один из приведенных выше ответов не был применим для меня, поскольку локальное изменение / исправление 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 работает должным образом.
Все упомянутые выше комментарии великолепны, они разделяют путь, который работал со мной для этого файла черного списка, который необходимо отредактировать:
"Название вашего проекта \node_modules\metro-bundler\src" Имя файла "blacklist.js"
Ну, вот мое решение
бежать:
npm update --filter
Эта команда обновит все необходимые зависимости, чтобы ваше родное приложение работало.
следующий
бежать:
npm start // expo start
Иногда такие проблемы могут возникать из-за нарушенных зависимостей. Там это можно решить обновлением пакетов.
npx npm-check-updates -u
npm i
шаг 1. node_modules/metro/src/blacklist.js шаг 2. заменить код
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
Я обнаружил, что 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[\\\\\\].*'
>
В 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, как описано здесь:https://www.howtogeek.com/261383/how-to-access-your-ubuntu-bash-files-in-windows-and-your-windows-system-drive-in-bash/
Надеюсь, это поможет!
Использование пряжи предотвращает эту ситуацию. Пряжу следует использовать