Twitter-Node无法构建Node.js(npm install twitter-node)

ahe*_*ick 0 twitter node.js

我正在尝试安装"Twitter-Node"(npm install twitter-node).Node JS的版本.3.2-pre.

当我尝试安装时收到以下错误.对我可能做错了什么的任何想法?对我来说似乎是一个非常直接的安装.我也能成功安装socket-io ......

m ERR! Error: twitter-node@0.0.2 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 twitter-node@0.0.2 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
Run Code Online (Sandbox Code Playgroud)

替代文字

Ivo*_*zel 5

简单解决方案

从这里抓住它:https:
//github.com/patmcnally/twitter-node

该模块npm是旧的(最后更新8月31日)并且在设计上被破坏,它编译自己的base64编码器而不是使用Node的内置功能.

安装:

  1. 下载档案并将其解压缩
  2. cd进入文件夹并运行 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}
Run Code Online (Sandbox Code Playgroud)

此提交删除了两个成员,并使用静态内联方法替换它们.

.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);
Run Code Online (Sandbox Code Playgroud)

有了这个:

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

然后跑npm rebuild twitter-node,你就完成了!不要使用安装,因为它将重新下载并覆盖更改.

PS:我必须使用require('twitter-node@0.0.2')它来导入它,因为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);
};
Run Code Online (Sandbox Code Playgroud)

这完全相同,并且不会对Node.js的每个其他更改爆炸:

new Buffer(user + ':' + pass).toString('base64')
Run Code Online (Sandbox Code Playgroud)