Использование модуля Underscore с Node.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 и импортирую их, они, похоже, работают правильно. Может быть, что-то особенное в библиотеке подделок?
Ответы
Ответ 1
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
На сегодняшний день (30 апреля 2012 года) вы можете использовать Underscore, как обычно, в вашем Node.js-коде. Предыдущие комментарии правы указывают, что интерфейс REPL (Node режим командной строки) использует "_" для хранения последнего результата, но вы можете использовать его в своих файлах кода, и он будет работать без проблем, выполнив стандарт:
var _ = require('underscore');
Счастливое кодирование!
Ответ 3
Или:
var _ = require('underscore')._;
Ответ 4
Имя _
, используемое node.js
REPL для хранения предыдущего ввода. Выберите другое имя.
Ответ 5
Примечание. Следующее работает только для следующей строки кода и только из-за совпадения.
С помощью Lodash,
require('lodash');
_.isArray([]); // true
Нет var _ = require('lodash')
, так как Lodash загадочно устанавливает это значение глобально, когда требуется.