react-native 开始给出 Invalid 正则表达式无效错误

Posted

技术标签:

【中文标题】react-native 开始给出 Invalid 正则表达式无效错误【英文标题】:react-native start giving Invalid regular expression invalid error 【发布时间】:2020-01-26 18:23:51 【问题描述】:

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

Getting started with react native

我尝试在没有博览会的情况下创建本机应用程序 所以我按照文档我遵循以下命令

npm install -g react-native-cli
react-native init AwesomeProject

运行android命令后

react-native run-android

它在模拟器上给了我以下错误

所以我用启动命令来运行metro server

react-native start

此命令在控制台中给了我另一个错误

【问题讨论】:

不知道有没有用但是试试关掉hermes试试看。facebook.github.io/react-native/docs/hermes 【参考方案1】:

Metro 使用某些 NPM 和 Node 版本时存在问题。

你有两种选择:

备选方案 1: 卸载 node 和 npm 并使用另一个(兼容)版本重新安装: https://nodejs.org/en/download
备选方案 2: 转到 npde_modules 文件夹中的文件:\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 installyarn install,则需要再次更改代码。

【讨论】:

【参考方案2】:

Nodejs的兼容性问题 我卸载了我的 Node(12.11) 并安装了 Node(10) 稳定版,它运行良好。

【讨论】:

【参考方案3】:

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

所以我想出了一个解决方案,可以节省您每次访问文件并更改文件的时间:

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

    安装文件替换模块:
npm install --save replace-in-file

    在与node_module 文件夹相同级别创建一个文件,将其命名为:metro-fix.js,例如。

    复制粘贴此脚本:

//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);

    现在每次运行 npm install 时只需运行:
node metro-fix.js

请参阅Replace-in-file docs。

【讨论】:

【参考方案4】:

here 有人问了一个类似的问题,可能是这个解决方案可能对你有用,因为我申请了它并且它有效

【讨论】:

【参考方案5】:

当您使用 choco 命令(choco install -y nodejs.install python2 jdk8)安装 NodeJS 时,它将安装最新版本的节点,在撰写本文时为 12.12.0回答。您必须将其降级到 10.16.3 并运行 react-native run-android 命令,它应该可以正常工作

【讨论】:

【参考方案6】:

是的,只需切换到 Node 版本 10 即可。

nvm install <version>
nvm use <version>

它工作...... :)

【讨论】:

嗨 Shekhar,欢迎来到 Stack Overflow,感谢您的贡献。由于您是 SO 新手,因此这里有一些关于如何编写更好答案的提示: (1) 您假设用户没有使用 node v10。您可以发表评论要求澄清。 (2) 您还假设此人正在使用nvm。问这个问题的人可能不知道它是什么,这可能会增加他们的困惑。【参考方案7】:

关闭命令提示符和地铁捆绑器,再做一次

【讨论】:

【参考方案8】:

我通过这一步解决了这个问题:

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

希望对你有帮助

【讨论】:

【参考方案9】:

是的,我也面临这个问题。实际上 Node.js 推荐给大多数用户的是 10.16.3 LTS 版本。 使用以下 choco 命令将安装最新版本的 12.11.0。 choco install -y nodejs.install python2 jdk8

我将 Node 版本从 12.11.0 降级到 10.16.3 LTS,它对我有用。

【讨论】:

【参考方案10】:

是因为node版本比较高。

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

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

所以首先从这里安装 nvm https://github.com/coreybutler/nvm-windows/releases

安装后记得将 nvm 路径添加到系统变量

然后nvm install 10.18.1 64

然后nvm install 12.14.1 64

列出所有安装的版本nvm list

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

nvm use 10.18.1  OR nvm use 12.14.1

【讨论】:

以上是关于react-native 开始给出 Invalid 正则表达式无效错误的主要内容,如果未能解决你的问题,请参考以下文章

react-native 命令给出语法错误

尽管 OpenGL 上下文有效,glGenTextures 仍给出 GL_INVALID_OPERATION

为啥这个程序会在 C 中给出 Invalid memory access 错误? [关闭]

AXIOS 调用在 React-Native 0.63 中给出网络错误

refreshControl 在 react-native 应用程序中给出“未定义不是函数......”

如何使用给定的 nativeID 识别目标 c 中的视图(在 react-native 中给出)