我一直在学习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库有一些特别之处?
答案 0 :(得分:193)
截至今天(2012年4月30日)您可以像往常一样在Node.js代码上使用Underscore。以前的注释正确指出REPL接口(Node的命令行模式)使用“_”来保存最后的结果但是您可以在代码文件上自由使用它,并且它可以通过执行标准而没有问题:
var _ = require('underscore');
快乐的编码!
答案 1 :(得分:167)
Node REPL使用下划线变量来保存最后一个操作的结果,因此它与Underscore库使用相同的变量冲突。尝试这样的事情:
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
答案 2 :(得分:28)
或者:
var _ = require('underscore')._;
答案 3 :(得分:13)
_
REPL用于保存先前输入的名称node.js
。选择其他名称。
答案 4 :(得分:-3)
注意:以下内容仅适用于下一行代码,仅由于巧合。
使用Lodash,
require('lodash');
_.isArray([]); // true
否var _ = require('lodash')
因为Lodash在需要时会神秘地设置此值。