Node.js와 함께 밑줄 모듈 사용


147

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 라이브러리에 특별한 것이 있습니까?

답변:


169

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

2
감사합니다. 그것은 간단했다.
Geoff

6
나는 지금 30 분 동안 키보드에 대고 머리를 두드렸다.
rossipedia

3
이것이 SO가 대단한 이유입니다. 이와 같은 훌륭한 답변은 "헤드 뱅킹"시간을 절약 해줍니다. 감사합니다 @ Mike
Brian Tracy


194

오늘 (2012 년 4 월 30 일) 현재 Node.js 코드에서 평소와 같이 Underscore를 사용할 수 있습니다. 이전 의견은 REPL 인터페이스 (노드의 명령 행 모드)가 "_"를 사용하여 마지막 결과를 보유하지만 코드 파일에서 자유롭게 사용할 수 있으며 표준을 수행하여 문제없이 작동한다는 것을 지적합니다.

var _ = require('underscore');

행복한 코딩!


7
밑줄을 세계화하려는 경우에는 작동하지 않습니다. gist.github.com/3220108
Lance Pollard

9
누군가 한 번은 Globals가 모든 개발 언어에서 나쁘다고 말했습니다. 필요한 모듈에서 var _ = require ( 'underscore')를 지정하는 데 문제가 발생하지 않습니다. nodejs.org/api/modules.html#modules_caching
Erick Ruiz de Chavez

2012 년 4 월 30 일은 어떤 노드 버전에 해당합니까?
poseid

2012 년 4 월은 0.6에 해당합니다.
Erick Ruiz de Chavez

Erick, 서버 측에서도 클라이언트 측 코드를 재사용하려고하면 문제가됩니다.
Brandon


13

REPL이 이전 입력을 보유하기 위해 _사용하는 이름 node.js입니다. 다른 이름을 선택하십시오.


10
__ 이중 밑줄? :)
Amc_rtty

3
이중 밑줄은 _und 느낌보다 낫습니다 :)
Kaushik Thirthappa

-3

참고 : 다음은 다음 코드 줄에서만 작동하며 우연의 일치로만 작동합니다.

Lodash와 함께

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

var _ = require('lodash')Lodash는 필요할 때이 값을 전 세계적으로 신비하게 설정 한 이후로 없습니다 .


아니요, lodash 또는 다른 항목에서는 작동하지 않습니다. 위에서 언급 한 것처럼 node는 마지막 명령문의 결과를로 설정하기 때문에 예제에서 작동합니다 _. 마지막 진술의 결과는 lodash lib였습니다. 따라서 다음 줄 에서 _.isArray([])작동 하지만 다시 는 작동 하지 않습니다.
Mark Kahn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.