如何解决“反应本机启动”上的错误

  1. 我刚刚安装了node.js和cli

    • 安装的node.js
    • 安装了react-native-cli

      npm -g react-native-cli
      
  2. 并创建了一个“新项目”。

    react-native init new_project
    
  3. 在“ new_project”目录中,我很疲倦地查看Metro bundler是否运行良好。

    react-native start
    
  4. 但是该命令给了我以下错误,并且Metro无法启动。有任何解决此错误的线索吗?(我正在使用Windows 10 OS。)

    • 命令: C:\projects\new_proj>react-native start

      错误无效的正则表达式:/(.\fixtures.|node_modules[]react[]dist[].|website\node_modules.|heapCapture\bundle.js|.\tests。)$/:未终止的字符类。使用--verbose标志运行CLI以获取更多详细信息。SyntaxError:无效的正则表达式:/(..fixtures.|node_modules[]react[]dist[].|website\node_modules.|heapCapture\bundle.js|.\tests.)$/:新RegExp( )在getBlacklistRE的黑名单(D:\ projects \ new_proj \ node_modules \ metro-config \ src \ defaults \ blacklist.js:34:10)(D:\ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native getDefaultConfig上的-community \ cli \ build \ tools \ loadMetroConfig.js:69:59)(D:\ projects \ new_proj \ node_modules \ react-native \ node_modules @ react-native-community \ cli \ build \ tools \ loadMetroConfig.js :85:20)在负载(D:

ProStafan2020/03/12 16:29:22

使用纱线可以防止这种情况。纱线应使用

GreenGil2020/03/12 16:29:22

在Windows 10上,我强烈建议安装Linux Bash Shell。

这是一个很好的设置指南:https : //www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/

只需按照以下步骤操作,选择Linux发行版,并避免在cmd上使用节点,因为明显的不稳定。

考虑到Microsoft强烈警告不要使用Windows软件添加或修改Linux文件,如下所述: howtogeek.com/261383/how-to-access-your-ubuntu-bash-files-in-windows-and-your-windows-猛击系统驱动器/

希望能帮助到你!

泡芙村村Pro2020/03/12 16:29:22

通过安装最新版本(目前为0.57.0)的metro-config进行修复,他们已解决了该问题:

npm安装Metro-config

您可以稍后在本机人员更新模块版本后将其删除

老丝猿阿飞2020/03/12 16:29:22

转到项目目录中的node_modules,查找metro-config \ src \ defaults \ blacklist.js并将其更改var blacklist: = {....}

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];
Tom阳光达蒙2020/03/12 16:29:21

你可以去...

\ 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__\/.*/
];
2020/03/12 16:29:21

通常,我不修改其中的文件node_modules/(或任何未提交为存储库一部分的文件),因为下一次清理,构建或更新将使它们退化。我过去肯定是这样做的,这使我难过几次。但这确实是一个短期/本地开发修复,直到/除非 metro-config更新。

谢谢!

斯丁GO神乐2020/03/12 16:29:21

具有修复程序PR已合并到Metro存储库中。现在我们只需要等待下一个版本。目前,最好的选择是降级到NodeJS v12.10.0正如布兰登指出的那样,以任何方式修改任何东西都是node_modules/非常糟糕的做法,并且不是最终的解决方案。

乐理查德2020/03/12 16:29:21

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

对于谁仍然在react-native,expo中没有官方补丁的情况下仍然收到此错误

使用yarn并将此设置添加到package.json

{
  ...
  "resolutions": {
    "metro-config": "bluelovers/metro-config-hotfix-0.56.x"
  },
 ...
古一达蒙2020/03/12 16:29:21

\ 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,因为它们已解决了节点问题。

前端SamTom2020/03/12 16:29:21

您有两种解决方案:

您可以将节点降级到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__\/.*/
];
飞羽2020/03/12 16:29:21

这是由节点v12.11.0引起的,原因是它处理常规位置的方式有两种方法可以解决此问题

方法一

您可以降级到节点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__\/.*/
];
斯丁村村GO2020/03/12 16:29:21

我遇到了同样的问题,我在项目中更改了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__\/.*/
];

这对我来说很完美

ItachiJinJin2020/03/12 16:29:21

我今天才第一次遇到类似的错误。它出现在中\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__\/.*/
];
Davaid神无2020/03/12 16:29:21

[快速回答]

使用某些NPM和Node版本的Metro出现问题。

您可以解决更改文件中某些代码的问题\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安装或yarn安装,则需要再次更改代码。