这是问题出现时我的源代码树:
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
以防万一,但错误仍然存在)。另外,请不要介意我在文件夹
无论如何,问题是:
我尝试在React Native中使用nodejs模块onvif,因此我使用this technique使用babel和已安装的browserfy模块来转换require方法以实现核心nodejs模块。我已经使用crypto之类的简单示例进行了测试,但它确实有用。但是,当我尝试简单地导入onvif模块时,我得到了这个:
Here's device.js line 30,看起来Cam
未定义
当我导入导入onvif.js
的{{1}}时,没有任何反应。但是当它再次导入cam.js
device.js
似乎未定义
我也试过this method这似乎避免了所有的babel翻译,但令人惊讶的是问题仍然存在。
更新
这是新的源代码树:https://github.com/lucaszanella/jscam/tree/98b714219ed25b9d91ea3af275177f66fdb74fa2/src/jscam
我现在正在使用extraNodeModules,这是官方的做法。您可以在此处查看我的依赖项:https://github.com/lucaszanella/jscam/blob/98b714219ed25b9d91ea3af275177f66fdb74fa2/src/jscam/rn-cli.config.js
就在这一行:https://github.com/isaacs/sax-js/blob/d65e3bb5049893aaab4aba05198b9cd335b5a1ad/lib/sax.js#L222
虽然
仍然看起来像是同一类型的错误更新:如果找不到dgram,请尝试
cam.js
它已经在package.json中,应该安装但有人抱怨它没有
答案 0 :(得分:3)
所以我找到了三个问题
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
或需要删除循环依赖因此,您要么require.js
修复jscam/src/jscam/node_modules/metro/src/lib/polyfills/require.js
polyfill,要么通过传递下面所需的对象来更改文件以删除循环导入
require('./device' ) (Cam);
并更新device.js
,如下所示
module.exports = (Cam) => {
然后删除
const Cam = require('./cam').Cam
这将确保删除循环依赖项,然后模块应该加载
PS:在旁注中,这就是为什么它表示坚持不懈的原因。这是你的第三次赏金尝试,我最后一次看到问题在我面前。但是你的第三次尝试激励我潜水,看看我是否能帮助你。