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:
- Téléchargez l'archive et l'extraire
- cd dans le dossier et exécuter
npm install .
- 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')
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
Étrange, de toute façon j'ai mis à jour ma réponse avec une solution beaucoup plus simple, voir le haut :) –
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