使用带有Node.js的Underscore模块

我一直在学习有关node.js和模块,似乎无法让Underscore库正常工作…似乎是我第一次使用Underscore函数,它覆盖_对象的结果我的函数调用。 任何人都知道发生了什么事? 例如,以下是来自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 

当我自己制作Javascript文件并导入它们时,它们似乎正在正常工作。 也许Underscore库有一些特别的东西?

Node REPL使用下划线variables来保存最后一个操作的结果,所以它和Underscore库使用相同的variables冲突。 尝试这样的事情:

 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 

截至今天(2012年4月30日),您可以像往常一样在您的Node.js代码中使用Underscore。 先前的评论是正确的指出,REPL接口(节点的命令行模式)使用“_”来保存最后的结果,但你可以自由地在你的代码文件上使用它,它会通过执行标准没有问题的工作:

 var _ = require('underscore'); 

快乐的编码!

要么 :

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

node.js REPL用来保存前一个input的名称_ 。 select另一个名字。

注意:以下内容仅适用于下一行代码,只是由于巧合。

用Lodash,

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

没有var _ = require('lodash')因为Lodash在需要的时候神秘地设置了这个值。