web-dev-qa-db-ja.com

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ファイルを作成してインポートすると、それらは正常に動作しているようです。 Underscoreライブラリには何か特別なものがあるのでしょうか?

145
Geoff

Node REPLはアンダースコア変数を使用して最後の操作の結果を保持するため、アンダースコアライブラリの同じ変数の使用と競合します。次のようなものを試してください:

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
168
Mike Scott

今日の時点で(April 30、2012) Node.jsコードで通常どおりアンダースコアを使用できます。以前のコメントは、REPLインターフェイス(ノードのコマンドラインモード)が最後の結果を保持するために "_"を使用しますが、コードファイルで自由に使用でき、問題なく機能することを示しています標準を実行する:

var _ = require('underscore');

ハッピーコーディング!

193

または :

    var _ = require('underscore')._;
28
micrub

_ REPLが以前の入力を保持するために使用する名前node.js。別の名前を選択してください。

13
dkiyatkin