将Underscore模块与Node.js一起使用

时间:2011-04-17 06:15:05

标签: node.js module underscore.js

我一直在学习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库有一些特别之处?

5 个答案:

答案 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在需要时会神秘地设置此值。