react-native 开始给出 Invalid regular expression 无效错误

react-native start giving Invalid regular expression invalid error

我跟着 link 开始使用 react-native

Getting started with react native

我尝试在没有 expo 的情况下创建本机应用程序 所以我根据文档我遵循了以下命令

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

运行android命令后

react-native run-android

在模拟器上出现以下错误

所以我使用 运行 metro 服务器的启动命令

react-native start

此命令在控制台中出现另一个错误

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

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

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

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

希望对您有所帮助

是的,我也面临着这个问题。实际上 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,它对我有用。

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

当你使用choco命令(choco install -y nodejs.install python2 jdk8)安装NodeJS时,它会安装最新版本的node在撰写此答案时为 12.12.0。你必须将它降级到 10.16.3 和 运行 react-native 运行-android命令,它应该可以正常工作

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

您有 2 个备选方案:


  • 备选方案 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__\/.*/
];

Please note that if you run npm install or yarn install you'll need to change the code again.

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

nvm install <version>
nvm use <version>

有效……:)

解决方案是按照上面的回答更改模块 metro-config 文件中的 blacklist.js 文件。但是每次运行npm/yarn install都得重新改一次

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

我使用了一个使用 JavaScript:

编辑文件的库
  1. 安装替换文件模块:
npm install --save replace-in-file
  1. 创建一个与 node_module 文件夹相同级别的文件,将其命名为:metro-fix.js 每个示例。

  2. 将此脚本复制粘贴到其中:

//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);
}
  1. 现在每次 运行 npm install 只需 运行:
node metro-fix.js

参见 Replace-in-file 文档。

因为node版本比较高

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

  2. 另一方面,如果您想将 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