2010-12-10 138 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