Alt Çekirdek modülünü Node.js ile kullanma


147

Node.js ve modülleri öğreniyorum ve Alt Çizgi kitaplığını düzgün bir şekilde çalıştıramıyorum ... Görünüşe göre Alt Çizgi'den bir işlevi ilk kez kullandığımda, sonuç olarak _ nesnesinin üzerine yazıyor işlev çağrım. Neler olup bittiğini bilen var mı? Örneğin, burada node.js REPL'den bir oturum var:

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 dosyalarını kendim oluşturup içe aktardığımda, düzgün çalışıyor gibi görünüyorlar. Belki Underscore kitaplığında özel bir şey vardır?

Yanıtlar:


169

Düğüm REPL, son işlemin sonucunu tutmak için alt çizgi değişkenini kullanır, bu nedenle Alt Çizgi kütüphanesinin aynı değişkeni kullanmasıyla çakışır. Bunun gibi bir şey dene:

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
Teşekkür ederim. Bu çok basitti.
Geoff

6
30 dakikadır kafamı klavyeme vuruyorum, bunun için teşekkürler!
rossipedia

3
SO harika olmasının nedeni budur. Bunun gibi harika yanıtlar, saatlerce "kafa vuruşundan" tasarruf sağlar. Teşekkür ederim @Mike
Brian Tracy

Düğüm v6 , REPL'de atamayı destekler_ .
John-David Dalton

195

Bugün itibariyle (30 Nisan 2012) , Node.js kodunuzda her zamanki gibi Underscore kullanabilirsiniz. Önceki yorumlar, REPL arayüzünün (Düğümün komut satırı modu) son sonucu tutmak için "_" karakterini kullandığına işaret ediyor, ANCAK sizin kod dosyalarınızda kullanmakta özgürsünüz ve standardı uygulayarak sorunsuz çalışacaktır:

var _ = require('underscore');

Mutlu kodlamalar!


7
Unutmayın, alt çizgiyi
Lance Pollard

9
Bir keresinde birisi bana Globals'ın tüm geliştirme dillerinde kötü olduğunu söylemişti. Bunu gerektiren modüllerde var _ = require ('alt çizgi') belirtmek zorunda bir sorun görmüyorum. nodejs.org/api/modules.html#modules_caching
Erick Ruiz de Chavez

30-apri-2012 hangi Düğüm sürümüne karşılık gelir?
poseid

Nisan 2012, 0.6'ya karşılık gelir.
Erick Ruiz de Chavez

Erick, sunucu tarafında da istemci tarafı kodunu yeniden kullanmaya çalışıyorsanız bu bir problemdir.
Brandon


13

REPL _tarafından node.jsönceki girişi tutmak için kullanılan ad . Başka bir isim seçin.


10
__ çift alt çizgi? :)
Amc_rtty

3
çift ​​alt çizgi _und hissettiğimden daha iyi :)
Kaushik Thirthappa

-3

Not: Aşağıdakiler yalnızca bir sonraki kod satırı için ve yalnızca bir tesadüf nedeniyle işe yarar.

Lodash ile

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

var _ = require('lodash')Lodash, gerektiğinde bu değeri küresel olarak gizemli bir şekilde belirlediğinden, hayır .


Hayır, bu Lodash veya başka bir şeyle işe yaramaz. Örneğinizde işe yarar çünkü yukarıda belirtildiği gibi düğüm, son ifadenin sonucunu olarak ayarlar _. Son ifadenizin sonucu lodash lib oldu. Yani bir sonraki satırda_.isArray([]) çalışacak , ama bir daha asla.
Mark Kahn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.