149 votes

Utilisation du module Underscore avec Node.js

J'ai appris à connaître node.js et les modules, et je n'arrive pas à faire fonctionner correctement la bibliothèque Underscore... il semble que la première fois que j'utilise une fonction d'Underscore, elle écrase l'objet _ avec le résultat de mon appel de fonction. Quelqu'un sait-il ce qui se passe ? Par exemple, voici une session du REPL de 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 moi-même les fichiers Javascript et que je les importe, ils semblent fonctionner correctement. Peut-être y a-t-il quelque chose de spécial avec la bibliothèque Underscore ?

196voto

A partir d'aujourd'hui (30 avril 2012) vous pouvez utiliser Underscore comme d'habitude sur votre code Node.js. Les commentaires précédents indiquent à juste titre que l'interface REPL (le mode ligne de commande de Node) utilise le "_" pour retenir le dernier résultat, mais vous êtes libre de l'utiliser sur vos fichiers de code et cela fonctionnera sans problème en faisant la norme :

var _ = require('underscore');

7 votes

Notez que cela ne fonctionne pas si vous essayez de globaliser l'underscore : gist.github.com/3220108

9 votes

Quelqu'un m'a dit un jour que les globaux sont mauvais dans tous les langages de développement. Je ne vois pas de problème à devoir spécifier var _ = require('underscore') sur les modules qui le nécessitent. nodejs.org/api/modules.html#modules_caching

0 votes

A quelle version de Node correspond le 30-apri-2012 ?

171voto

Mike Scott Points 2763

Le Node REPL utilise la variable underscore pour contenir le résultat de la dernière opération, ce qui entre en conflit avec l'utilisation de la même variable par la bibliothèque Underscore. Essayez quelque chose comme ceci :

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

0 votes

Node v6 permet d'assigner à _ dans le REPL.

29voto

micrub Points 439

Ou :

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

21 votes

"npm install underscore" d'abord

3 votes

npm install -g underscore vous voulez dire :)

6 votes

13voto

dkiyatkin Points 136

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

3 votes

Le double soulignement est mieux que le _und je pense :)

-2voto

itcouldevenbeaboat Points 1357

Note : Ce qui suit ne fonctionne que pour la ligne de code suivante, et seulement par coïncidence.

Avec Lodash,

require('lodash');
_.isArray([]); // true

Non var _ = require('lodash') puisque Lodash définit mystérieusement cette valeur de manière globale lorsque cela est nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X