在 Node.js 中使用 Underscore 模块
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5691901/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using the Underscore module with Node.js
提问by Geoff
I've been learning about node.js and modules, and can't seem to get the Underscore library to work properly... it seems that the first time I use a function from Underscore, it overwrites the _ object with the result of my function call. Anyone know what's going on? For example, here is a session from the node.js REPL:
我一直在学习 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
When I make Javascript files myself and import them, they seem to be working properly. Maybe there's something special with the Underscore library?
当我自己制作 Javascript 文件并导入它们时,它们似乎工作正常。也许 Underscore 库有什么特别之处?
回答by Erick Ruiz de Chavez
As of today (April 30, 2012)you can use Underscore as usual on your Node.js code. Previous comments are right pointing that REPL interface (Node's command line mode) uses the "_" to hold the last result BUT on you are free to use it on your code files and it will work without a problem by doing the standard:
截至今天(2012 年 4 月 30 日),您可以像往常一样在 Node.js 代码上使用 Underscore。之前的评论是正确的,REPL 接口(Node 的命令行模式)使用“_”来保存最后的结果,但是您可以在代码文件中自由使用它,并且通过执行标准它可以毫无问题地工作:
var _ = require('underscore');
Happy coding!
快乐编码!
回答by Mike Scott
The Node REPL uses the underscore variable to hold the result of the last operation, so it conflicts with the Underscore library's use of the same variable. Try something like this:
Node REPL 使用 underscore 变量来保存上次操作的结果,因此它与 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
回答by micrub
Or :
或者 :
var _ = require('underscore')._;
回答by dkiyatkin
The name _used by the node.jsREPL to hold the previous input. Choose another name.
该名称_由使用node.jsREPL保留以前的输入。选择另一个名称。
回答by Code Whisperer
Note: The following only works for the next line of code, and only due to a coincidence.
注意:以下仅适用于下一行代码,并且仅由于巧合。
With Lodash,
有了洛达什,
require('lodash');
_.isArray([]); // true
No var _ = require('lodash')since Lodash mysteriously sets this value globally when required.
否,var _ = require('lodash')因为 Lodash 在需要时会神秘地全局设置此值。

