2010-12-10 6 views
0

J'essaye d'installer "Twitter-Node" (npm install twitter-node). Version .3.2-pré de Node JS.Twitter-Node Ne pas construire Node.js (npm install twitter-node)

Lorsque j'essaye et installe, je reçois l'erreur suivante. Des pensées sur ce que je peux faire de mal? On dirait une installation assez simple pour moi. J'ai pu installer socket io aussi ...

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

Répondre

5

solution simple

suffit de saisir avec succès d'ici:
https://github.com/patmcnally/twitter-node

Le module sur npm est ancien (dernière mise à jour le 31 août) et cassé par de signe, il compile son propre encodeur base64 au lieu d'utiliser la fonctionnalité intégrée de Node.

Pour installer:

  1. Téléchargez l'archive et l'extraire
  2. cd dans le dossier et exécuter npm install .
  3. Avoir une belle journée :)

Vieille réponse

L'installation exécute gcc pour la compilation un module base64 qui dépend des noeuds Buffer class (l'implémentation C++), puisqu'il y a eu quelques changements à cela dans 3.x, ça explose!

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 enlevé les deux membres et les remplacer par des méthodes inlined statiques.

En .npm/twitter-node/0.0.2/package/vendor/node-base64/base64.cc vous devez remplacer les lignes 177/178 et 198/199 qui ressemblent à ceci:

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

Avec ceci:

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

Ensuite, exécutez npm rebuild twitter-node et vous avez terminé! N'utilisez pas l'installation car elle sera téléchargée à nouveau et écrasera les modifications. PS: J'ai dû utiliser require('[email protected]') pour l'importer, car npm n'a pas créé le lien symbolique dans .local/lib/node mais vous pouvez facilement résoudre ce problème par vous-même.

Mise à jour

Je ne jette un oeil sur le module, c'est hilarant, ils compilent une lib 80Ko qui est sujette à l'échec avec changé à Node.js juste utiliser un encodage base64 UNE SEULE FOIS .

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

Cela fait exactement la même chose et ne pas exploser tous les changements à Node.js:

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

Intéressant ... quand je navigue dans le dossier .npm dans l'explorateur de fichiers (sur ubuntu) Je ne vois pas de dossier twitter-node là-bas? Des pensées? J'ai posté une capture d'écran ci-dessus, vous pouvez voir. – aherrick

+0

Étrange, de toute façon j'ai mis à jour ma réponse avec une solution beaucoup plus simple, voir le haut :) –

+0

Merci pour vos commentaires. Alors, quel est le correctif pour moi alors? J'essaie d'installer via NPM. Cela ne va-t-il pas fonctionner dans ce cas? Ai-je besoin d'essayer de l'installer sans NPM? Je ne sais pas comment faire ça. Merci. – aherrick

Questions connexes