使用带有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在需要的时候神秘地设置了这个值。