Перенос узла nodejs для React Native: Object.prototype undefined

Здесь мое исходное дерево в точный момент проблемы:

https://github.com/lucaszanella/jscam/tree/cf29b3cc90df7c5c7bb2d27c2205264d52b0715d/src/jscam

Я верю, что npm install, npm start и npm run android его (обратите внимание, что onvif не установлен из npm, а клонирован в npm post-install скрипт, а затем установлен, но он устанавливается в node_modules с символической node_modules на место, где он клонированный. Я даже пытался поместить все в node_modules всякий случай, но ошибка сохраняется). Также не против дополнительных докеров, которые у меня есть в папке

В любом случае проблема заключается в следующем:

Я пытаюсь использовать модуль nodejs onvif в React Native, поэтому я использовал этот метод для перевода требуемых методов с помощью babel и установленных модулей браузера для реализации основных модулей nodejs. Я тестировал с помощью простых примеров, таких как криптография, и это сработало. Однако, когда я пытаюсь просто импортировать модуль onvif, я получаю следующее:

enter image description here

Здесь device.js строка 30, выглядит как Cam не определено здесь

Когда я импортирую onvif.js который импортирует cam.js, ничего не происходит. Но затем он импортирует device.js который, кажется, становится неопределенным при повторном импортировании cam.js

Я также пробовал этот метод, который, кажется, избегает всех переводов Babel, но на удивление проблема остается.

ОБНОВИТЬ:

Здесь новое исходное дерево: https://github.com/lucaszanella/jscam/tree/98b714219ed25b9d91ea3af275177f66fdb74fa2/src/jscam

Теперь я использую extraNodeModules, который является официальным способом. Вы можете видеть мои зависимости здесь: https://github.com/lucaszanella/jscam/blob/98b714219ed25b9d91ea3af275177f66fdb74fa2/src/jscam/rn-cli.config.js

Теперь ошибка изменилась: enter image description here

На этой строке: https://github.com/isaacs/sax-js/blob/d65e3bb5049893aaab4aba05198b9cd335b5a1ad/lib/sax.js#L222

Он по-прежнему похож на тот же тип ошибок, хотя

Обновление: если вы не нашли дграмму, попробуйте

npm install lucaszanella/react-native-dgram-shim

Это уже в пакете.json, он должен быть установлен, но кто-то пожаловался, что он не

Ответы

Ответ 1

Итак, есть три вопроса, которые я нашел

  • react-native-dgram-shim необходимо скопировать как dgram в node_modules
  • stream: require.resolve('stream-browserify') необходимо использовать в rn-cli.config.js. Используемый вами потоковый модуль, по-видимому, не определял объект Stream а доступ Stream.prototype вызвал ошибку
  • onvif модуль имеет cam → device → cam, это обрабатывается хорошо browserify, webpack и nodejs. Но metro упаковщика, который react-native, похоже, не нравится циклический импортные. Это означает, что требования require.js должны быть исправлены или необходимо удалить циклическую зависимость

Таким образом, вы либо исправляете polyfill require.js в jscam/src/jscam/node_modules/metro/src/lib/polyfills/require.js либо вы изменяете свои файлы, чтобы удалить циклический импорт, передав необходимые объекты, как jscam/src/jscam/node_modules/metro/src/lib/polyfills/require.js ниже

require('./device' )  (Cam);

И обновите device.js как device.js ниже.

module.exports = (Cam) => {

И удалите

const Cam = require('./cam').Cam

Это позволит убедиться, что циклическая зависимость удалена, и модуль должен затем загрузить штраф

PS: На стороне примечания, поэтому его настойчивость побеждает. Это была твоя 3-я щедрость, и я смотрел, как вопрос второй раз передо мной. Но ваша третья попытка побудила меня погрузиться и посмотреть, смогу ли я помочь вам.