Я только что установил node.js и cli
- installed node.js
установлен react-native-cli
npm -g react-native-cli
И создал «новый проект».
react-native init new_project
и внутри этого каталога 'new_project' я устал проверять, хорошо ли работает сборщик метро.
react-native start
Но команда дала мне следующую ошибку, и метро не запускается. Есть ключ к исправлению этой ошибки? (Я использую ОС 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)
- command :
Как устранить ошибку при запуске с реактивным запуском
Ответы (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__\/.*/
];
Это вызвано узлом 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__\/.*/
];
metro-config
или expo-cli
?
- person its4zahoor; 07.12.2019
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, вам нужно снова изменить код.
.\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__\/.*/
];
Это связано с несоответствием конфигурации файла черного списка.
Чтобы решить эту проблему,
Нам нужно перейти в папку проекта.
Открыть
\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__\/.*/
];
В моем проекте нет 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
MyProject\node_modules\metro\src\blacklist.js
. Ваше здоровье.
- person beltrone; 27.05.2020
У меня такая же проблема.
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__\/.*/
];
Это изменение устранило мою ошибку.
У меня была та же проблема, что я изменил 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__\/.*/
];
это отлично сработало для меня
PR с исправлением был объединен в metro репозиторий. Теперь нам просто нужно дождаться следующего релиза. На данный момент лучший вариант - перейти на NodeJS v12.10.0
. Как отметил Брэндон, изменение чего-либо в node_modules/
является действительно плохой практикой и не будет окончательным решением.
Решение простое, но временное ...
Обратите внимание: если вы запустите 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__\/.*/
];
To:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
- Затем сгенерируйте постоянный файл патча:
npx patch-package metro-config
- В вашем
package.json
запустите патч:
"scripts": {
+ "postinstall": "npx patch-package"
}
Готово! Теперь этот патч будет производиться каждые npm install
/ yarn install
.
Благодаря https://github.com/ds300/patch-package
https://github.com/facebook/metro/issues/453
для тех, кто все еще получает эту ошибку без официального патча в react-native, expo
используйте пряжу и добавьте этот параметр в package.json
{
...
"resolutions": {
"metro-config": "bluelovers/metro-config-hotfix-0.56.x"
},
...
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, поскольку они устраняют проблему с узлом.
Ты можешь пойти в...
\ 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__\/.*/
];
Я только что обновил 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.
Как правило, я не изменяю файлы внутри node_modules/
(или чего-либо, что не фиксируется как часть репозитория), поскольку следующая чистка, сборка или обновление их регрессируют. Я определенно поступал так в прошлом, и это пару раз укусило меня. Но это действительно работает как краткосрочное / локальное исправление для разработчиков до тех пор, пока не будет обновлен metro-config
.
Спасибо!
Я обнаружил, что 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[\\\\\\].*'
>
Исправьте это, установив metro-config последней версии (на данный момент 0.57.0), они исправили проблему:
npm установить metro-config
вы можете удалить его позже, после того, как ребята из React-native обновят версии модулей
Использование пряжи предотвращает эту ситуацию. Пряжу следует использовать
В 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 /
Надеюсь, это поможет!
Все упомянутые выше комментарии великолепны, они разделяют путь, который работал со мной для этого файла черного списка, который необходимо отредактировать:
Имя вашего проекта \ node_modules \ metro-bundler \ src Имя файла blacklist.js
Сегодня я столкнулся именно с этой проблемой, но ни один из приведенных выше ответов не был применим для меня, поскольку локальное изменение / исправление 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 работает должным образом.
Run CLI with --verbose flag for more details.
Возможно, вы забыли избежать обратной косой черты. См. stackoverflow.com/questions/14639339/. Не могу сказать без подробностей. - person rhand   schedule 28.09.2019