2010-12-10 97 views
0

我想安装“Twitter节点”(npm安装twitter节点)。节点JS的版本.3.2-pre。Twitter节点未能建立Node.js(npm安装twitter节点)

当我尝试安装时收到跟随错误。有关我可能做错什么的想法?看起来像一个非常简单的安装给我。我能够成功安装插座-io的太...

m ERR! Error: [email protected] preinstall: `./build.sh` 
npm ERR! `sh` failed with 1 
npm ERR!  at ChildProcess.<anonymous> (/usr/local/lib/node/.npm/npm/0.2.12- 1/package/lib/utils/exec.js:25:18) 
npm ERR!  at ChildProcess.emit (events.js:34:17) 
npm ERR!  at ChildProcess.onexit (child_process.js:164:12) 
npm ERR! 
npm ERR! Failed at the [email protected] preinstall script. 
npm ERR! This is most likely a problem with the twitter-node package, 
npm ERR! not with npm itself. 
npm ERR! Tell the author that this fails on your system: 
npm ERR!  ./build.sh 

alt text

回答

5

简单的解决方案

就从这里抢吧:
https://github.com/patmcnally/twitter-node

npm该模块旧(最后更新8月31日)和由de标记,它编译自己的base64编码器,而不是使用Node的内置功能。

要安装:

  1. 下载存档并解压缩
  2. 光盘放入该文件夹,然后运行npm install .
  3. 有一个愉快的一天:)

老答案

安装运行gcc编译一个base64模块依赖于节点Buffer类(C++实现),因为在3.x中有一些变化,它会爆炸!

Waf: Entering directory `/home/ivo/.local/lib/node/.npm/twitter-node/0.0.2/package/vendor/node-base64/build' 
[1/2] cxx: base64.cc -> build/default/base64_1.o 
../base64.cc: In function ‘v8::Handle<v8::Value> base64_encode_binding(const v8::Arguments&)’: 
../base64.cc:178: error: ‘class node::Buffer’ has no member named ‘data’ 
../base64.cc:178: error: ‘class node::Buffer’ has no member named ‘length’ 
../base64.cc: In function ‘v8::Handle<v8::Value> base64_decode_binding(const v8::Arguments&)’: 
../base64.cc:199: error: ‘class node::Buffer’ has no member named ‘data’ 
../base64.cc:199: error: ‘class node::Buffer’ has no member named ‘length’ 
Waf: Leaving directory `/home/ivo/.local/lib/node/.npm/twitter-node/0.0.2/package/vendor/node-base64/build' 
Build failed: -> task failed (err #1): 
    {task: cxx base64.cc -> base64_1.o} 

This commit删除了两个成员,并用静态内联方法替换它们。

.npm/twitter-node/0.0.2/package/vendor/node-base64/base64.cc您需要更换线177/178198/199它看起来像这样:

Buffer *buffer = ObjectWrap::Unwrap<Buffer>(args[0]->ToObject()); 
char *str = base64_encode((unsigned char*)buffer->data(), buffer->length(),&len); 

有了这个:

Local<Object> buffer = args[0]->ToObject(); 
char *str = base64_encode((unsigned char*)Buffer::Data(buffer), Buffer::Length(buffer),&len); 

然后运行npm rebuild twitter-node就大功告成了!不要使用安装,因为它会重新下载并覆盖更改。

PS:我不得不使用require('[email protected]')才能导入它,因为npm没有在.local/lib/node中创建符号链接,但是您可以轻松地自行修复它。

更新

我看看模块,这是热闹,他们编一个80KB的lib与改变的Node.js只使用一个使用Base64编码ONE TIME这是容易出现故障

// Returns a Basic Auth header fit for HTTP. 
var basicAuth = function basicAuth(user, pass) { 
    return "Basic " + b64.encode(user + ":" + pass); 
}; 

这不完全一样的东西和所有其他变化的Node.js不爆炸:

new Buffer(user + ':' + pass).toString('base64') 
+0

有趣......所以当我浏览到.npm文件夹中的文件浏览器(在Ubuntu上)我没有看到一个twitter-node文件夹吗?有什么想法吗?我上面张贴了一张截图,你可以看到。 – aherrick 2010-12-10 10:39:26

+0

奇怪的是,无论如何,我用更简单的解决方案更新了我的答案,请参阅顶部:) – 2010-12-10 10:51:33

+0

感谢您的反馈。那么最适合我的是什么?我正尝试通过NPM进行安装。在这种情况下这不起作用吗?我是否需要尝试在没有NPM的情况下安装它?不知道该怎么做。谢谢。 – aherrick 2010-12-10 15:50:28