node.js module underscore.js

Usando el módulo Subrayado con Node.js



module underscore.js (5)

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: /<%([/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

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


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 codificación!


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


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


O bien:

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


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.