如何解决'react-native start'的错误

IT技术 reactjs react-native react-native-android react-native-cli metro-bundler
2021-04-22 04:35:59
  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. 但是命令给了我以下错误并且地铁没有启动。修复此错误的任何线索?(我使用的是 Windows 10 操作系统。)

    • 命令 : 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 ( ) 在黑名单 (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:

6个回答

我今天第一次遇到类似的错误。它出现在\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__\/.*/
];
非常感谢你!我按照你说的做了修改,现在可以用了。我是否必须在每个项目上修改它,或者有没有办法在全球范围内应用它?
2021-05-22 04:35:59
从 Github 上的查询中得到了一些其他答案。- '它是由节点 v12.11.0 引起的,降级到 v12.10.0 会解决它。' 来自 Leo.Lei。我还需要看看它是否有效。
2021-05-25 04:35:59
非常感谢!它为我节省了很多时间。我刚刚在今晚将我的 Node.js 从 v8.xx 升级到 v12.13.0,然后突然出现这个错误导致应用程序启动失败......没有这个帖子我不知道这是由这个错误引起的......
2021-05-26 04:35:59
优秀的修复!非常感谢。从损坏的 npm 缓存到 PERM 错误,React Native 看起来就像这样的马车。光是安装就花了我两天时间。
2021-05-27 04:35:59
/node_modules[\/\]react[\/\]dist[\/\].*/, 只是这一行需要改变
2021-06-15 04:35:59

这是由节点 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__\/.*/
];
@schellack 什么版本React-native可以解决这个错误?
2021-05-28 04:35:59
你能给我解释一下吗?
2021-06-10 04:35:59
10 月份提交了一个拉取请求:github.com/facebook/metro/commit/...
2021-06-16 04:35:59
这非常有帮助,你们不能提交拉取请求吗?metro-configexpo-cli
2021-06-18 04:35:59

这是由于不匹配的黑名单文件配置。

为了解决这个问题,

  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__\/.*/
];
有用!!仅使用此代码片段即可完全解决问题 <3
2021-06-17 04:35:59

[快速回答]

使用某些 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 install 或 yarn install,则需要再次更改代码。

这个问题是不是开发者解决不了?每次我来这里。谢谢先生
2021-06-05 04:35:59
请注意,如果您使用的是旧版本的 react-native(例如 0.51.0),则要更改的文件位于: .\node_modules\metro-bundler\src\blacklist.js
2021-06-17 04:35:59
我不认为这是一个很好的解决方案。修改 node_modules 内的文件
2021-06-19 04:35:59
是的,这个问题可以通过地铁开发人员进行这些更改来解决。
2021-06-20 04:35:59

您有两种解决方案:

您可以将节点降级到 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__\/.*/
];