43

我正在尝试运行使用 Metro Bundler 的现有 React Native 项目。我的操作系统是 Ubuntu 20.04,我尝试在物理 Android 设备和使用 Android Studio 创建的 Android 模拟器上运行该应用程序。

我已经成功克隆了项目的 repo,安装了它的依赖项(yarn),构建了应用程序(react-native run-android),并在我的手机和模拟器上打开了应用程序。但是,运行react-native start错误说TypeError: cb.apply is not a function。这是我在运行时得到的完整信息和错误react-native start

$ react-native start
warn Your project is using deprecated "rnpm" config that will stop working from next release. Please use a "react-native.config.js" file to configure the React Native CLI. Migration guide: https://github.com/react-native-community/cli/blob/master/docs/configuration.md
warn The following packages use deprecated "rnpm" config that will stop working from next release:
  - rn-fetch-blob: https://npmjs.com/package/rn-fetch-blob
Please notify their maintainers about it. You can find more details at https://github.com/react-native-community/cli/blob/master/docs/configuration.md#migration-guide.
┌──────────────────────────────────────────────────────────────────────────────┐
│                                                                              │
│  Running Metro Bundler on port 8081.                                         │
│                                                                              │
│  Keep Metro running while developing on any JS projects. Feel free to        │
│  close this tab and run your own Metro instance if you prefer.               │
│                                                                              │
│  https://github.com/facebook/react-native                                    │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

warn Your project is using deprecated "rnpm" config that will stop working from next release. Please use a "react-native.config.js" file to configure the React Native CLI. Migration guide: https://github.com/react-native-community/cli/blob/master/docs/configuration.md
warn The following packages use deprecated "rnpm" config that will stop working from next release:
  - rn-fetch-blob: https://npmjs.com/package/rn-fetch-blob
Please notify their maintainers about it. You can find more details at https://github.com/react-native-community/cli/blob/master/docs/configuration.md#migration-guide.
Looking for JS files in
   /home/ggiuffre/Documents/squib/app 

Loading dependency graph, done.
 BUNDLE  [android, dev] ./index.js ░░░░░░░░░░░░░░░░ 0.0% (0/1)/home/ggiuffre/Documents/squib/app/node_modules/@react-native-community/cli/node_modules/graceful-fs/polyfills.js:285
        if (cb) cb.apply(this, arguments)
                   ^

TypeError: cb.apply is not a function
    at /home/ggiuffre/Documents/squib/app/node_modules/@react-native-community/cli/node_modules/graceful-fs/polyfills.js:285:20
    at FSReqCallback.oncomplete (fs.js:169:5)

安装graceful-fs(正如另一篇关于同一问题的帖子所建议的那样)并没有改变任何东西,我仍然得到同样的错误。

这里可能是什么问题?提前致谢。

4

9 回答 9

60

我在 CI 上遇到了非常相似的问题,但它在我的本地机器(节点 13)上正常工作。在 CI 中,当使用我两个月前发布的代码在 CircleCI 或 AppCenter 上构建项目时,它会引发以下错误。它只是没有意义,就像节点已经动态损坏了。

我用节点 10、12 和 14 测试了相同的代码,但现在它只适用于节点 10 (10.22.0)。

我遇到的错误:

/home/circleci/my-app/node_modules/@react-native-community/cli/node_modules/graceful-fs/polyfills.js:285
        if (cb) cb.apply(this, arguments)
                   ^

TypeError: cb.apply is not a function
    at /home/circleci/my-app/node_modules/@react-native-community/cli/node_modules/graceful-fs/polyfills.js:285:20
    at FSReqCallback.oncomplete (fs.js:169:5)

> Task :app:bundleReleaseJsAndAssets FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:bundleReleaseJsAndAssets'.
> Process 'command 'node'' finished with non-zero exit value 1

更新

解决我的问题的方法是为package.json不允许任何库使用“4.2.4”之前的优雅 fs 版本添加一个解决方案。现在它再次与节点 12 一起工作。

PS:不要忘记运行yarnnpm run install更新您的.lock. 如果此解决方案对您不起作用,请在 Node 12.18.3 上与此问题相关的此线程添加评论

  "devDependencies": {
    ...
  },
  "resolutions": {
    "graceful-fs": "4.2.4"
  },
于 2020-08-05T00:39:25.153 回答
20

我今天在构建时也得到了这个。(运行节点 12.8.3)

我重新安装了以下软件包:

npm install graceful-fs --save-dev

这解决了上述问题。

于 2020-08-20T20:52:17.220 回答
8

我在两台电脑上都解决了。一个需要更多的工作。

  • 选项1:

    • 关注这个目录C:\Users(your username)\AppData\Roaming
    • 删除npm文件夹
    • 如果有一个npm 缓存文件夹。运行npm clean cache -force,或npm cache clean -force在 Windows 上(现在需要强制清除缓存)
    • 如果不执行选项 2,您现在应该很好。
  • 选项 2:

    • 关注这个目录C:\Users(your username)\AppData\Roaming
    • 删除npm文件夹
    • 如果有一个npm 缓存文件夹。npm clean cache -force在 linux 或windows 上运行npm cache clean(现在需要强制清理缓存)
    • 确保删除与 Nodejs 相关的所有内容
    • 并卸载了 NodeJS。
    • 重新安装 Node.js。
    • 你现在应该很好了。
于 2020-12-13T01:56:57.970 回答
7

这里有一个 Ubuntu 20.04 用户,节点为 16.0.0。当我运行时,我遇到了同样的错误:

> npx create-react-app [my app]

我发现我必须重新安装 create-react-app (首先从 node_modules 中删除它)才能解决它。

> npm install create-react-app
于 2021-04-30T22:10:13.493 回答
6

如果你安装了 nvm,它就更简单了。要检查这一点,请运行

nvm --version

然后安装最新的 lts 版本的节点,运行

nvm install --lts

这对我有用,如果有帮助,请告诉我

于 2020-08-10T14:06:11.450 回答
3

如果您使用的是 Windows 10,我通过执行以下操作解决了此问题:

首先,这是错误:

在此处输入图像描述

  1. 导航%USERPROFILE%\AppData\Roaming\
  2. 通过键入删除任何可能存在的缓存Run npm clean cache —force
  3. 删除NPM文件夹
  4. 重新安装 Node.js 并确保在安装 Node.js 期间包含 NPM

完成上述步骤后,我可以像以前一样运行 npm 并添加我需要的模块。 在此处输入图像描述

于 2021-02-09T18:06:15.810 回答
1

就我而言,我试图使用Husky并发生此错误:

husky > commit-msg (node v15.6.0)
npm ERR! cb.apply is not a function

npm ERR! A complete log of this run can be found in:
npm ERR!     ~/.npm/_logs/2021-01-24T06_04_04_218Z-debug.log

>>> Installation [ 'commitlint@latest' ] fail with code 1 <<<

husky > commit-msg hook failed (add --no-verify to bypass)

我运行下面的命令,问题就解决了

npm i -D commitlint
于 2021-01-24T06:11:57.577 回答
1

在 Windows 上:

  1. 转到路径 C:/Users/{User}/AppData/Roaming

  2. 删除 路径中的 2 个文件夹npm npm-cache

  3. npm 清理缓存——强制

于 2021-06-20T15:30:08.183 回答
1

您的节点版本与您尝试使用的库/框架不匹配。尝试更新您的节点版本并检查。

最好使用 nodist/nvm 通过手指捕捉进行升级或降级。

于 2021-07-23T05:12:08.570 回答