web-dev-qa-db-fra.com

Utilisation du module Underscore avec Node.js

J'ai appris à propos de node.js et de ses modules et je n'arrive pas à obtenir le fonctionnement correct de la bibliothèque Underscore. Il semble que la première fois que j'utilise une fonction de Underscore, elle écrase l'objet _ avec le résultat de mon appel de fonction. Quelqu'un sait ce qui se passe? Par exemple, voici une session du REPL node.js:

Admin-MacBook-Pro:test admin$ node
> require("./underscore-min")
{ [Function]
  _: [Circular],
  VERSION: '1.1.4',
  forEach: [Function],
  each: [Function],
  map: [Function],
  inject: [Function],
  (...more functions...)
  templateSettings: { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g },
  template: [Function] }
> _.max([1,2,3])
3
> _.max([4,5,6])
TypeError: Object 3 has no method 'max'
    at [object Context]:1:3
    at Interface.<anonymous> (repl.js:171:22)
    at Interface.emit (events.js:64:17)
    at Interface._onLine (readline.js:153:10)
    at Interface._line (readline.js:408:8)
    at Interface._ttyWrite (readline.js:585:14)
    at ReadStream.<anonymous> (readline.js:73:12)
    at ReadStream.emit (events.js:81:20)
    at ReadStream._emitKey (tty_posix.js:307:10)
    at ReadStream.onData (tty_posix.js:70:12)
> _
3

Lorsque je crée et importe des fichiers Javascript moi-même, ils semblent fonctionner correctement. Peut-être qu'il y a quelque chose de spécial avec la bibliothèque Underscore?

145
Geoff

Le Node REPL utilise la variable de soulignement pour stocker le résultat de la dernière opération. Il est donc en conflit avec l'utilisation de la même variable par la bibliothèque Underscore. Essayez quelque chose de similaire à cette:

Admin-MacBook-Pro:test admin$ node
> _und = require("./underscore-min")
{ [Function]
  _: [Circular],
  VERSION: '1.1.4',
  forEach: [Function],
  each: [Function],
  map: [Function],
  inject: [Function],
  (...more functions...)
  templateSettings: { evaluate: /<%([\s\S]+?)%>/g, interpolate: /<%=([\s\S]+?)%>/g },
  template: [Function] }
> _und.max([1,2,3])
3
> _und.max([4,5,6])
6
168
Mike Scott

A compter d'aujourd'hui (30 avril 2012) vous pouvez utiliser le soulignement comme d'habitude sur votre code Node.js. Les commentaires précédents indiquent que REPL interface (mode de ligne de commande du nœud) utilise le "_" pour conserver le dernier résultat MAIS vous êtes libre de l’utiliser sur vos fichiers de code et cela fonctionnera sans un problème en faisant la norme:

var _ = require('underscore');

Bonne codage!

193

Ou :

    var _ = require('underscore')._;
28
micrub

Le nom _ utilisé par le node.js REPL pour conserver l’entrée précédente. Choisissez un autre nom.

13
dkiyatkin