TypeError: cb.apply не является функцией - PullRequest
5 голосов
/ 02 августа 2020

Я пытаюсь запустить существующий проект React Native, который использует Metro Bundler. Моя операционная система - Ubuntu 20.04, и я пытался запустить приложение как на физическом устройстве Android, так и на симуляторе Android, который я создал с помощью Android Studio.

Я успешно клонировал проект. 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 ]

6 голосов
/ 05 августа 2020

У меня была очень похожая проблема с CI, но она нормально работает на моей локальной машине (Node 13). В CI при сборке проекта на CircleCI или в AppCenter с кодом, который я уже выпустил два месяца назад (go), возникает следующая ошибка. Это просто не имеет смысла, это похоже на то, как если бы node сломался динамически.

Я тестировал тот же код с узлами 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, чтобы запретить использование библиотеки использовать версию graceful-fs до "4.2.4". Теперь он снова работает с узлом 12.

PS: Не забудьте запустить yarn или npm run install, чтобы обновить .lock. Если это решение не работает для вас, добавьте комментарий к этой ветке , связанной с этой проблемой на узле 12.18.3

  "devDependencies": {
    ...
  },
  "resolutions": {
    "graceful-fs": "4.2.4"
  },
1 голос
/ 20 августа 2020

Я тоже получил это сегодня при сборке. (запущенный узел 12.8.3)

Я переустановил следующий пакет:

npm install graceful-fs --save-dev

Это решило указанную выше проблему.

1 голос
/ 02 августа 2020

Кажется, что ошибка решена путем понижения версии Node.js с 12 до 10, как было предложено в другом сообщении .

0 голосов
/ 10 августа 2020

Если у вас установлен nvm, это еще проще. Чтобы проверить это, запустите

nvm --version

, затем, чтобы установить последнюю lts-версию узла, запустите

nvm install --lts

Это то, что сработало для меня, дайте мне знать, если это поможет

...