Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unknow module "http" #4

Closed
344303947 opened this issue Feb 29, 2016 · 24 comments
Closed

unknow module "http" #4

344303947 opened this issue Feb 29, 2016 · 24 comments

Comments

@344303947
Copy link

165312

@Richard-Cao
Copy link
Member

npm版本升级到3.x,删除node_modules重新npm install试试

@Richard-Cao Richard-Cao changed the title unknow module "http" [Win]unknow module "http" Mar 14, 2016
@zhangwebb
Copy link

我也遇到了楼主红屏中一样的问题,环境如下:
Win10 下 Android Studio 编译安装到HTC Sense真机运行,且已开启悬浮窗设置;
npm install时,发现有两个module安装失败: bufferutil、utf-8-validate,但react-native start 正常;
npm都是最新版、也删除node_modules重新npm install试了,不行

@Richard-Cao
Copy link
Member

@zhangwebb 这个我暂时也不知道怎么弄……因为我一直是mac环境,没用win。。。

@zhangwebb
Copy link

补充:
刚上面说的两个module安装失败: bufferutil、utf-8-validate,已参考这里解决:

我干的事情是:

  • 设了一环境变量:GYP_MSVS_VERSION=2015 (不确定是否需要,反正加了)
  • 以管理员权限开启个命令行窗口,安装那两个模块Ok

以上仅仅是解决了那两个模块安装失败问题,太晚了,明天再完整测试下

补充2:
造成这里的问题是如果安装的模块依赖了 C++ 模块, 需要通过 node-gyp 来编译;
那在Windows下 Nodejs C++ 模块编译环境, 简单一句话就是 "Python + VC++ 编译环境".
详见:
http://fengmk2.com/blog/2014/07/node-gyp-cpp-build-env.html

@Richard-Cao
Copy link
Member

@zhangwebb 期待你明天测试的结果

@zhangwebb
Copy link

重新测试还是不行……

下面说说测试过程中的一些认识,权当抛砖引玉:

仔细看下错误栈信息(一楼截图也有反映):

...\node_modules\avsocloud-sdk\lib\av.js: 18 --->
...\node_modules\avsocloud-sdk\lib\utils.js: 249 --->
...\node_modules\avsocloud-sdk\lib\browserify-wrapper\ajax.js: 3 <--|

应该是 avsocloud-sdk 这个模块引起的,然后找到这个ajax.js的第3行:
var http = require('http');
它在加载Node.js的http模块。

而之所以报 Requiring unknow module "http",显然没有加载到Node.js里的这个模块,
或者说,报错时,应用就没运行在Node环境下?搜了下,看这里:

http://stackoverflow.com/questions/29371694/react-native-and-requirehttp

里面有个高票Answer:

According to the react-native team,

For this specific case you'll likely want to use the fetch API which is provided by the environment. React Native does not run inside of the node runtime.

fetch works similarly to http.

应该是说React Native并没有运行在Node Runtime,也就不应该加载Node才有的模块;应该使用React Native的网络API:fetch

文档:
http://reactnative.cn/docs/0.21/network.html#content

Fetch
fetch是一个更好的网络API,它由标准委员会提出,并已经在Chrome中实现。它在React Native中也默认可以使用。
……
……

但是至于为何 @Richard-Cao 在Mac下的开发环境就没事咧?这个暂时就不知道了,可能需要大家互相验证对比下是开发平台问题?还是环境变量设置问题?还是Dev与Realease运行环境问题?还是avsocloud-sdk模块兼容性问题?还是血统问题(Mac下就是不折腾就是TM没事你来打我吖)?……

我找了另一个项目试了下:
https://github.com/race604/ZhiHuDaily-React-Native
安装、运行正常,稍稍证明了下自己目前的开发环境跑Android项目还是可以的。

哦,对了,又去 avsocloud-sdk 的 Github 看了下:
https://github.com/leancloud/javascript-sdk
(是这里吧?从 https://www.npmjs.com/package/avoscloud-sdk 这里跳转过来的)

里面有项目的目录结构说明,其中

av.js // node.js 环境入口文件
browserify-wrapper // 目录中为针对 node.js 与浏览器环境之间差异的不同实现

呐,针对React Native是否兼容,这个初次接触不好说

@Richard-Cao
Copy link
Member

@zhangwebb reading项目用的网络库就是fetch呀

@Richard-Cao
Copy link
Member

@zhangwebb 我用的avoscloud的sdk版本是专门兼容react-native的版本,可能是他里面的实现没用fetch?

@Richard-Cao
Copy link
Member

@zhangwebb mac下是没问题的,这个问题只在win下报过,你可以先删了avoscloud的sdk然后试试看,如果可以的话就说明是这个sdk的问题导致没兼容win

@zhangwebb
Copy link

我也感觉是 avsocloud-sdk 兼容问题,但目前初学也许还有什么东西没认识到,回头我再学习下你的项目,试试屏蔽掉 avsocloud 后的效果。进展我会在这里同步的

@Richard-Cao
Copy link
Member

@zhangwebb 好的好的。期待进展

@tans
Copy link

tans commented Mar 22, 2016

使用avoscloud-sdk 的rc5 或者 rc6 可能就没有问题. 我之前用latest也出现这个问题.
npm install avoscloud-sdk@1.0.0-rc6 --save

@Richard-Cao
Copy link
Member

@tans @zhangwebb 试试看,因为我mac是没问题的,这个只是win下有问题

@zhangwebb
Copy link

久等了……下面是测试情况:
1、先尝试注释掉 avsocloud-sdk 相关引用代码,测试运行OK!
2、再按 @tans 所说依次尝试使用 avsocloud-sdk 的rc7、rc6、rc5的版本测试,发现rc5的确可以!

翻了下rc5版本的代码,发现它出问题部分的网络请求使用的是XMLHttpRequest 方式实现,这种方式是React Native所支持的;而从rc6开始,就改为使用Node.js的http模块了,可能为了实现起来比 XMLHttpRequest 简洁?但正是因为这个改变,导致如上问题…… avsocloud-sdk 官方是不是考虑后续版本兼容下这个问题呢?

可是为啥Mac就没事咧?( ▼-▼ )

@Richard-Cao
Copy link
Member

@zhangwebb 感谢你的测试!!!这个可以给avoscloud-sdk提issue了,他们应该确实需要兼容一下。

@zhangwebb
Copy link

嗯,支持!

@520xiaopohai
Copy link

mac
avsocloud-sdk 是、rc5 还是一样的错。最新的github版本

@Richard-Cao
Copy link
Member

@520xiaopohai mac居然会报错?我一直是mac跑没问题啊……你删了node_modules然后重新npm install试试?
我的npm版本:3.7.3
node版本:4.2.1

@520xiaopohai
Copy link

我的node版本 v5.9.1 nam版本 跟你一样

@Richard-Cao
Copy link
Member

@520xiaopohai 你试试先删除avoscloud这个sdk,看看有没有这个错误

@520xiaopohai
Copy link

刪掉之后 運行沒有問題。

@Richard-Cao
Copy link
Member

@520xiaopohai 应该就是这个sdk的兼容问题,因为reading里的反馈模块我是存在leancloud上的

@Richard-Cao
Copy link
Member

如果遇到clone项目之后依然报这个错误的问题,可以尝试如下方法:
1.

npm uninstall avoscloud-sdk
npm install avoscloud-sdk@1.0.0-rc5

即可

@Richard-Cao Richard-Cao changed the title [Win]unknow module "http" unknow module "http" Apr 26, 2016
@pefish
Copy link

pefish commented May 5, 2016

好神奇,rc5真的没有问题

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants