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

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

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

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

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

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

      ошибка Неверное регулярное выражение: /(.\fixtures.|node_modules следующим образом: Unterminated character class. Для получения более подробной информации запустите CLI с флагом --verbose. SyntaxError: недопустимое регулярное выражение: /(.\fixtures.|node_modules следующим образом: /(.\fixtures.|node_modules[ократическ .реактиц. при новом 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@react-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 \ 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)

Ответы (23)

Вы можете перейти на ...

\ 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 последней версии (на данный момент 0.57.0) они исправили проблему:

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

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

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

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

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

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

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

От

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

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

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

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

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

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

"error Неверное регулярное выражение: /(.\fixtures\.| 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__\/.*/
];

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

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

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

So, how can we run this automatically?

Постоянный раствор

Чтобы сделать это «автоматически» после установки ваших узловых модулей, вы можете использовать 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.

Thanks to https://github.com/ds300/patch-package

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

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

  • npm install -g npm-check-updates
  • ncu -u
  • установка npm

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

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

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

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

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

D: \ code \ response-native> nvm использовать 12.10.0
Теперь использую node v12.10.0 (64-бит)

D: \ code \ react-native> узел
Добро пожаловать в Node.js v12.10.0.
Для получения дополнительной информации введите ".help".
> /node_modules[/\\ ]react[/\\ provideddist[/\\ght.*/.source
'node_modules [\\ / \\\\] react [\\ / \\\\] dist [\\ / \\\\]. * »
> /node_modules[/\\ ]react[/\\ provideddist[/\\ght.*/.source.replace(/\//g, path.sep)
'node_modules [\\\\\\\\] react [\\\\\\\\] dist [\\\\\\\\]. * »
>
(Для выхода снова нажмите ^ C или ^ D или введите .exit)
>

D: \ code \ response-native> nvm использовать 12.11.0
Теперь используется node v12.11.0 (64-бит)

D: \ code \ react-native> узел
Добро пожаловать в Node.js v12.11.0.
Для получения дополнительной информации введите ".help".
> /node_modules[/\\ ]react[/\\ provideddist[/\\ght.*/.source
'node_modules [/ \\\\] реагировать [/ \\\\] dist [/\\\\;;;;;;;;;;*'
> /node_modules[/\\ ]react[/\\ provideddist[/\\ght.*/.source.replace(/\//g, path.sep)
'node_modules [\\\\\\] react [\\\\\\] dist [\\\\\\]. * »
>
(Для выхода снова нажмите ^ C или ^ D или введите .exit)
>

D: \ code \ response-native> nvm использовать 12.13.0
Теперь используется node v12.13.0 (64-бит)

D: \ code \ react-native> узел
Добро пожаловать в Node.js v12.13.0.
Для получения дополнительной информации введите ".help".
> /node_modules[/\\ ]react[/\\ provideddist[/\\ght.*/.source
'node_modules [/ \\\\] реагировать [/ \\\\] dist [/\\\\;;;;;;;;;;*'
> /node_modules[/\\ ]react[/\\ provideddist[/\\ght.*/.source.replace(/\//g, path.sep)
'node_modules [\\\\\\] react [\\\\\\] dist [\\\\\\]. * »
>
(Для выхода снова нажмите ^ C или ^ D или введите .exit)
>

D: \ code \ response-native> nvm использовать 13.3.0
Теперь используется node v13.3.0 (64-бит)

D: \ code \ react-native> узел
Добро пожаловать в Node.js v13.3.0.
Для получения дополнительной информации введите ".help".
> /node_modules[/\\ ]react[/\\ provideddist[/\\ght.*/.source
'node_modules [/ \\\\] реагировать [/ \\\\] dist [/\\\\;;;;;;;;;;*'
> /node_modules[/\\ ]react[/\\ provideddist[/\\ght.*/.source.replace(/\//g, path.sep)
'node_modules [\\\\\\] react [\\\\\\] dist [\\\\\\]. * »
>

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

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

Сегодня была такая же проблема с проектом, который был построен на старой версии узла, я только что установил узел v12.9.0, и проблема была решена. Я использую nvm, чтобы легко понизить версию узла.

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

Спасибо!

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

var sharedBlacklist = [
  /node_modules[/\\ptingreact[/\\ ]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"
От

до

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

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

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

На 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 /

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

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

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

У меня была та же проблема, что я изменил 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 update --filter

Эта команда обновит все необходимые зависимости, чтобы ваше приложение, поддерживающее реакцию, работало

вперед

запустить: npm start // expo start

Перейти на

\ 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, поскольку они решают проблему с узлом.

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

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

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

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

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

var sharedBlacklist = [
  /node_modules[/\\ptingreact[/\\ ]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, вам нужно снова изменить код.

В моем проекте нет 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__\/.*/
];

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

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

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

node_modules \ metro \ src \ blacklist.js

2022 WebDevInsider