【问题标题】:Twitter-Node Failing to Build Node.js (npm install twitter-node)Twitter-Node 无法构建 Node.js (npm install twitter-node)
【发布时间】:2011-05-23 09:26:56
【问题描述】:

我正在尝试安装“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

【问题讨论】:

    标签: twitter node.js


    【解决方案1】:

    简单的解决方案

    从这里获取它:
    https://github.com/patmcnally/twitter-node

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

    安装:

    1. 下载存档并解压
    2. cd 进入文件夹并运行npm install .
    3. 祝你有美好的一天:)

    旧答案

    安装运行 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/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,你就完成了!不要使用 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')
    

    【讨论】:

    • 有趣...所以当我在文件资源管理器(在 ubuntu 上)中浏览到 .npm 文件夹时,我在那里看不到 twitter-node 文件夹?有什么想法吗?我在上面贴了一个截图你可以看到。
    • 奇怪,无论如何我用一个更简单的解决方案更新了我的答案,请参阅顶部:)
    • 感谢您的反馈。那么我的解决方法是什么?我正在尝试通过 NPM 安装。在这种情况下这不起作用吗?我需要在没有 NPM 的情况下尝试安装它吗?不知道该怎么做。谢谢。
    • 在我的答案顶部查看我的简单解决方案,您需要做的就是从 github repo 下载较新版本并通过 NPM 安装它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2022-10-07
    • 1970-01-01
    • 2014-12-18
    • 2019-08-30
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多