TypeError: cb.apply is not a function

TypeError: cb.apply is not a function

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

我已成功克隆项目的存储库,安装其依赖项 (yarn),构建应用程序 (react-native run-android),并在我的 phone 和模拟器上打开应用程序。但是,运行ning react-native start 出错说 TypeError: cb.apply is not a function。这是 运行ning 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(根据 关于同一问题的建议)没有任何改变,我仍然遇到同样的错误。

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

我在 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”之前的 graceful-fs 版本。现在它再次与节点 12 一起工作。

PS:不要忘记 运行 yarnnpm run install 更新您的 .lock。如果此解决方案对您不起作用,请在 Node 12.18.3

上对与此问题相关的 thread 添加评论
  "devDependencies": {
    ...
  },
  "resolutions": {
    "graceful-fs": "4.2.4"
  },

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

nvm --version

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

nvm install --lts

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

我今天做build的时候也遇到了这个问题。 (运行 节点 12.8.3)

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

npm install graceful-fs --save-dev

这解决了上面的问题。

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

  • 选项 1:

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

    • 关注此目录C:\Users(your username)\AppData\Roaming
    • 删除 npm 文件夹
    • 如果有一个 npm 缓存 文件夹。 运行 npm clean cache -force linux,或 npm cache clean windows(- 现在需要强制清理缓存)
    • 确保删除所有与 Nodejs 相关的内容
    • 并卸载了 NodeJS。
    • 重新安装 Nodejs。
    • 你现在应该好了。

在我的例子中,我试图使用 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

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

首先,这是错误:

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

完成上述步骤后,我可以像以前一样运行 npm 并添加我需要的模块。

这里有一个 Ubuntu 20.04 用户,节点为 16.0.0。我在 运行:

时遇到了同样的错误
> npx create-react-app [my app]

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

> npm install create-react-app

在 Windows:

  1. 转到路径 C:/用户/{用户}/AppData/Roaming

  2. 删除2个文件夹 npm npm-缓存 在路径

  3. npm 清理缓存 —force

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

最好用nodist/nvm弹指升级或降级。