1. ホーム
  2. node.js

[解決済み] Node.jsでUnderscoreモジュールを使用する

2022-05-09 13:32:06

質問

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は最後の操作の結果を保持するためにunderscore変数を使用するので、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