Ошибка React-Native-worklets-core: рабочие модули не найдены, хотя я их установил

Поэтому я пытаюсь разработать приложение для Android с помощью React-Native, которое использует обнаружение позы Google ML Kit. Я все еще в начале этого проекта, но моя первая цель — запустить приложение и посмотреть, работает ли распознавание позы. По этой причине мне нужны камера Reaction-native-Vision и пакет React-Native-Worklets-Core для процессора кадров. Просто чтобы вы знали: в App.tsx я использую процессор кадров следующим образом:

//[...]
 const frameProcessor = useFrameProcessor((frame: any) => {
    'worklet';
    const poseObject = objectDetect(frame);

 //[...]

и взамен включил его в компонент Camera:

return (
    <>
      <Camera
        frameProcessor = {frameProcessor}
        style = {StyleSheet.absoluteFill}
        device = {device}
        isActive = {true}
      />
//[...]

В настоящее время я все еще работаю с эмулятором Android Studio. Я сделал все, как описано в инструкциях React-Native-Vision-Camera и -Worklets-core, и сборка всегда проходит успешно, но приложение выдает следующий код ошибки в эмуляторе:

Uncaught Error

Frame Processors are not available, react-native-worklets-core is not installed! Error: TurboModuleRegistry.getEnforcing(...): 'Worklets' could not be found. Verify that a module by this name is registered in the native binary.
Bridgeless mode: false. TurboModule interop: false. Modules loaded:
{"NativeModules":["PlatformConstants","LogBox","Timing","AppState","SourceCode","BlobModule","WebSocketModule","DevSettings","DevToolsSettingsManager","Networking","Appearance","DevLoadingView","HeadlessJsTaskSupport","UIManager","DeviceInfo","ImageLoader","SoundManager","IntentAndroid","DeviceEventManager","RNGestureHandlerModule","I18nManager","ReanimatedModule"],"TurboModules":[],"NotFound":["NativePerformanceCxx","NativePerformanceObserverCxx","RedBox","BugReporting","LinkingManager","Worklets"]}

Дело в том, что я уже установил Worklets-Core!

Мои зависимости в package.json:

  "dependencies": {
    "metro-react-native-babel-preset": "^0.77.0",
    "react": "18.2.0",
    "react-native": "0.73.6",
    "react-native-gesture-handler": "^2.14.0",
    "react-native-reanimated": "^3.6.2",
    "react-native-svg": "^15.3.0",
    "react-native-vision-camera": "^4.0.5",
    "react-native-worklets-core": "^1.3.3"
  },

И зависимости в build.gradle:

dependencies {
    implementation("com.facebook.react:react-android")
    implementation("com.facebook.react:react-native:+")
    implementation("com.facebook.soloader:soloader:0.10.3")
    implementation 'com.google.mlkit:pose-detection:18.0.0-beta4'
    implementation 'com.google.mlkit:pose-detection-accurate:18.0.0-beta4'
    implementation 'com.google.mlkit:vision-common:17.0.0'
    implementation 'com.google.mlkit:vision-interfaces:16.0.0'
    implementation 'com.google.mlkit:camera:16.0.0-beta3'
    implementation 'androidx.annotation:annotation:1.3.0'
    implementation 'com.google.android.gms:play-services-tasks:18.0.0'
    implementation 'com.android.support:multidex:1.0.3'


    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-vision-camera')
    implementation project(':react-native-svg')
    implementation project(':react-native-worklets-core')

    if (hermesEnabled.toBoolean()) {
        implementation("com.facebook.react:hermes-android")
    } else {
        implementation jscFlavor
    }
}

И мои конфигурации Babel:

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
    '@babel/plugin-proposal-class-properties',
    '@babel/plugin-transform-private-methods',
    '@babel/plugin-transform-flow-strip-types',
    '@babel/plugin-transform-runtime',
    '@babel/plugin-transform-arrow-functions',
    ['react-native-worklets-core/plugin'],
    ['react-native-reanimated/plugin', { globals: ['__poseDetection'] }],
  ],
};

Я что-то пропустил? Есть ли отсутствующий импорт, о котором я не знаю?

  • Я уже несколько раз удалил node_modules и снова установил зависимости, но ошибка все та же.

  • Я проверил другие версии Vision-Camera и Worklets-Core, но все, кроме V4 для Vision-Camera и V1 для Worklets-Core, приводит к проблемам совместимости с другими зависимостями. Для всего остального: та же ошибка

  • Я пробовал вручную связать ядро ​​рабочих листов с камерой Vision, но для версии 1.x.x связывание отключено, поскольку, по словам разработчиков, оно делает это автоматически.

  • Я попытался использовать Worklets-Core как одноранговую зависимость вместо стандартной зависимости. На самом деле это приводит к тому, что Gradle не может создать приложение. Я получаю ошибку:

> Could not resolve all task dependencies for configuration ':classpath'.
      > Could not find com.facebook.react:react-native-gradle-plugin:.
        Required by:
            project :

При использовании в качестве стандартной зависимости gradle может найти путь к классам.

  • Я включил Worklets-Core в settings.gradle:
include ':react-native-worklets-core'
project(':react-native-worklets-core').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-worklets-core/android')

Никаких изменений вообще

  • Я проверил GitHub на наличие той же проблемы, но ни одна из проблем не была точно такой же. Стратегии их устранения — это те, которые я только что перечислил здесь.

Я не знаю, сделал ли я что-то здесь, но я только что импортировал Worklets-Core в App.tsx с помощью команды «import 'react-native-worklets-core';». С тех пор не говорится, что Worklets-Core не установлено, но я все равно получаю сообщение об ошибке. Пишет: «Не удалось найти рабочие модули».

SetchFrank 30.06.2024 08:59
2
1
277
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

попробуйте добавить следующую строку в массив плагинов Babel.config.js. Это должно включить рабочие модули в вашем приложении React Native. ИЛИ попробуйте связать свой проект с пакетом рабочих листов, но привязка вручную невозможна в ответном нативном режиме, но вы просто попробуйте один раз

react-native link react-native-worklets-core

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
    '@babel/plugin-proposal-class-properties',
    '@babel/plugin-transform-private-methods',
    '@babel/plugin-transform-flow-strip-types',
    '@babel/plugin-transform-runtime',
    '@babel/plugin-transform-arrow-functions',
    ['react-native-worklets-core/plugin'],
    ['react-native-worklets-core/inline-requires'], // Add this line
    ['react-native-reanimated/plugin', { globals: ['__poseDetection'] }],
  ],
};

Спасибо за совет, но, к сожалению, это приводит к неудачной сборке: Error: Cannot find module 'react-native-worklets-core/inline-requires' И к связыванию вручную: как я уже сказал, я уже пробовал, но терминал выдает мне ответ, что «ссылка» не существует как команда: После набрав «npx response-native link response-native-worklets-core», я получаю ответ: ``` ошибка: неизвестная команда 'link' ```

SetchFrank 21.06.2024 13:40
Ответ принят как подходящий

Итак, я наконец понял это:

Ошибка состоит из 2 частей:

  1. «Процессоры Frame недоступны, ядро ​​реакции-native-worklets-core не установлено!»
  2. «Ошибка: TurboModuleRegistry.getEnforceing(...): «Рабочие файлы» не найдены. Убедитесь, что модуль с этим именем зарегистрирован в собственном двоичном файле».

В первую часть: вставка «import 'react-native-worklets-core»;' в App.tsx, как я уже упоминал в своем комментарии, приводит к решению этой части.

Ко второй части: мой импорт MainApplication.kt не был завершен. К сожалению, я не разместил их здесь, но я забыл строки импорта «import com.worklets.WorkletsPackage» и сам пакет для React, где также указан «MainReactPackage»:

override fun getPackages(): List<ReactPackage> {
            return Arrays.asList<ReactPackage>(
                MainReactPackage(),
                PoseDetectionPackage(),
                RNGestureHandlerPackage(),
                ReanimatedPackage(),
                CameraPackage(),
                SvgPackage(),
                WorkletsPackage() //This one
            )
        }

Возможно, вторая часть этого исправления также решает первую часть, но я только что попробовал несколько вещей, и эти шаги решили для меня всю проблему.

Другие вопросы по теме