Использование модуля Underscore с Node.js - PullRequest
145 голосов
/ 17 апреля 2011

Я изучал node.js и модули и не могу заставить библиотеку Underscore работать должным образом ... кажется, что когда я в первый раз использую функцию из Underscore, она перезаписывает объект _ с помощью результат моего вызова функции. Кто-нибудь знает, что происходит? Например, вот сеанс из узла .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 ]

193 голосов
/ 01 мая 2012

На сегодняшний день (30 апреля 2012 г.) вы можете использовать Underscore как обычно для своего кода Node.js.Предыдущие комментарии правы, указывая на то, что интерфейс REPL (режим командной строки узла) использует «_» для хранения последнего результата, НО вы можете свободно использовать его в своих файлах кода, и он будет работать без проблем, выполняя стандарт:

var _ = require('underscore');

Удачного кодирования!

168 голосов
/ 17 апреля 2011

Узел 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
28 голосов
/ 22 февраля 2012

Или:

    var _ = require('underscore')._;
13 голосов
/ 01 марта 2012

Имя _, используемое node.js REPL для хранения предыдущего ввода.Выберите другое имя.

0 голосов
/ 05 июля 2015

Примечание. Следующее работает только для следующей строки кода и только из-за совпадения.

С Лодашем,

require('lodash');
_.isArray([]); // true

Нет var _ = require('lodash'), поскольку Lodash при необходимости таинственно устанавливает это значение глобально.

...