Usando el módulo Subrayado con Node.js

He estado aprendiendo sobre node.js y módulos, y parece que no puedo hacer que la biblioteca Underscore funcione correctamente … parece que la primera vez que uso una función de Underscore, sobrescribe el objeto _ con el resultado de mi llamada a la función. Alguien sabe lo que está pasando? Por ejemplo, aquí hay una sesión de node.js REPL:

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: //g, interpolate: //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. (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. (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 

Cuando hago archivos Javascript e los importo, parece que funcionan correctamente. Tal vez hay algo especial con la biblioteca Underscore?

    El Node REPL utiliza la variable de subrayado para mantener el resultado de la última operación, por lo que entra en conflicto con el uso de la misma variable por parte de la biblioteca Underscore. Pruebe algo como esto:

     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 

    A partir de hoy (30 de abril de 2012) puede usar Subrayar como de costumbre en su código Node.js. Los comentarios anteriores apuntan a que la interfaz REPL (modo de línea de comando de Node) usa el “_” para contener el último resultado, PERO está en libertad de usarlo en los archivos de código y funcionará sin problemas haciendo el estándar:

     var _ = require('underscore'); 

    Feliz encoding!

    O bien:

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

    El nombre _ utilizado por el node.js REPL para contener la entrada anterior. Elige otro nombre

    Nota: Lo siguiente solo funciona para la siguiente línea de código, y solo debido a una coincidencia.

    Con Lodash,

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

    No var _ = require('lodash') ya que Lodash misteriosamente establece este valor globalmente cuando es necesario.