简单的解决方案
从这里获取它:
https://github.com/patmcnally/twitter-node
npm 上的模块很旧(8 月 31 日最后更新)并且被设计破坏,它编译了自己的 base64 编码器,而不是使用 Node 的内置功能。
安装:
- 下载存档并解压
- cd 进入文件夹并运行
npm install .
- 祝你有美好的一天:)
旧答案
安装运行 gcc 来编译一个依赖于节点 Buffer 类(C++ 实现)的 base64 模块,因为在 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/178 和198/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,你就完成了!不要使用 install,因为它会重新下载并覆盖更改。
PS:我必须使用 require('twitter-node@0.0.2') 来导入它,因为 npm 没有在 .local/lib/node 中创建符号链接,但您可以轻松地自行修复。
更新
我确实看过这个模块,这很有趣,他们编译了一个 80kb 的库,它很容易失败,更改为 Node.js 只是为了使用 base64 编码ONE TIME。。 p>
// 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')