Reactjs react native start提供无效的正则表达式无效错误

Reactjs react native start提供无效的正则表达式无效错误,reactjs,react-native,react-native-android,react-native-cli,metro-bundler,Reactjs,React Native,React Native Android,React Native Cli,Metro Bundler,我按照以下链接开始使用react native 我试图创建没有expo的本地应用程序 因此,我根据文档遵循以下命令 npm install -g react-native-cli react-native init AwesomeProject 运行android命令后 react-native run-android 它在模拟器上给了我以下错误 所以我使用start命令来运行metro服务器 react-native start 这个命令在控制台中给了我另一个错误 关闭命令提示符和m

我按照以下链接开始使用react native

我试图创建没有expo的本地应用程序 因此,我根据文档遵循以下命令

npm install -g react-native-cli
react-native init AwesomeProject
运行android命令后

react-native run-android
它在模拟器上给了我以下错误

所以我使用start命令来运行metro服务器

react-native start
这个命令在控制台中给了我另一个错误


关闭命令提示符和metro bundler,然后再做一次

它的Nodejs兼容性问题
我卸载了我的Node(12.11)并安装了Node(10)稳定版本,它工作得非常好。

我通过以下步骤解决了这个问题:

  • 卸载节点v12并安装节点v8.9.4
  • 重新安装react-native cli
  • 重新创建项目
    react native init myApp--版本0.60.0
  • react native start

  • 希望能有所帮助是的,我也面临着这个问题。实际上,建议大多数用户使用的Node.js版本是10.16.3 LTS。 使用以下choco命令将安装最新版本的12.11.0。 choco安装-y nodejs.install python2 jdk8


    我将节点版本从12.11.0降级到10.16.3 LTS,它对我有效。

    有人问了一个类似的问题,可能这个解决方案对你有效,因为我应用了,当你使用choco命令安装NodeJS(choco install-y NodeJS.install python2 jdk8)时,它有效,它将安装最新版本的node,在编写此答案时为12.12.0。您必须将其降级到10.16.3,然后运行react native run android命令,它应该可以正常工作

    使用某些NPM和节点版本的Metro存在问题

    你有两种选择:

    • 备选方案1:卸载节点和npm,并使用其他(兼容)版本重新安装:

    • 备选方案2:转到npde_modules文件夹中的文件:
      \node_modules\metro config\src\defaults\blacklist.js
      并更改此代码:
    var sharedBlacklist=[
    /节点单元模块[/\\]反应[/\\]距离[/\\]./,,
    /网站\/node\u模块\/.*/,
    /heapCapture\/bundle\.js/,
    /.*\/\uuuuu测试\ uu\/*/
    ];
    
    为此:

    var sharedBlacklist=[
    /节点单元模块[\/\\]反应[\/\\]距离[\/\\]./,,
    /网站\/node\u模块\/.*/,
    /heapCapture\/bundle\.js/,
    /.*\/\uuuuu测试\ uu\/*/
    ];
    
    请注意,如果运行
    npm安装
    warn安装
    ,则需要再次更改代码


    是的,只要切换到节点版本10就可以了

    nvm install <version>
    nvm use <version>
    
    nvm安装
    nvm使用
    

    它起作用了……)

    解决方案是更改模块
    metro config
    文件中的
    blacklist.js
    文件,如上所述。但是每次运行
    npm/warn install
    时,您都必须再次更改它

    因此,我提出了一个解决方案,可以节省您每次查看文件并更改文件的时间:

    我使用了一个使用JavaScript编辑文件的库:

  • 在文件模块中安装替换:
  • 创建一个与
    node\u模块
    文件夹相同级别的文件,根据示例将其命名为:
    metro fix.js

  • 复制并在其中粘贴此脚本:

  • 现在,每次运行
    npm install
    时,只需运行:

  • 请参阅文档。

    这是因为节点版本更高

  • 解决方案之一是,您可以轻松地将节点版本从
    12.x
    降级到
    10.x
    ,或者卸载12.x并安装10.x

  • 另一方面,如果您想将12.x用于其他项目,该怎么办。 因此,下面的解决方案使它更容易。您可以使用nvm来控制节点的多个版本

  • 所以首先从这里安装nvm

    安装后,请记住将nvm路径添加到系统变量

    然后
    nvm安装10.18.1 64

    然后
    nvm安装12.14.1 64

    列出已安装的所有版本
    nvm列表

    当您想从一个版本切换到另一个版本时,请使用命令

    nvm use 10.18.1  OR nvm use 12.14.1
    

    我不知道它是否有效,但请尝试关闭hermes并尝试一次。嗨,Shekhar,欢迎来到Stack Overflow,感谢您的贡献。由于您是SO新手,以下是关于如何编写更好答案的一些提示:(1)假设用户没有使用节点v10。你可以发表评论要求澄清。(2) 您还假设此人正在使用
    nvm
    。提出问题的人可能不知道问题是什么,这可能会增加他们的困惑。
    //Load the library
    const replace = require('replace-in-file');
    // path for metro config file
    const path = 'node_modules/metro-config/src/defaults/blacklist.js';
    // creating options for editing the file
    const options = [
      {
        files: path,
        from: 'modules[/',
        to: 'modules[\\/',
      },
      {
        files: path,
        from: 'react[/',
        to: 'react[\\/',
      },
      {
        files: path,
        from: 'dist[/',
        to: 'dist[\\/',
      },
    ];
    
    try {
      let results;
      // looping on each option
      options.forEach(e => {
        results = replace.sync(e);
        console.log('Replacing "'+e.from+'" by "'+e.to+'"  results:', results[0].hasChanged);
      });
    
    } catch (error) {
      console.error('Error occurred:', error);
    }
    
    node metro-fix.js
    
    nvm use 10.18.1  OR nvm use 12.14.1