Node.js के साथ अंडरस्कोर मॉड्यूल का उपयोग करना


147

मैं नोड.जेएस और मॉड्यूल के बारे में सीख रहा हूं, और ठीक से काम करने के लिए अंडरस्कोर लाइब्रेरी प्राप्त नहीं कर सकता ... ऐसा लगता है कि पहली बार मैं अंडरस्कोर से एक फ़ंक्शन का उपयोग करता हूं, यह _ ऑब्जेक्ट को ओवरराइट करता है मेरा फ़ंक्शन कॉल। किसी को पता है क्या हो रहा है? उदाहरण के लिए, यहाँ नोड से एक सत्र है।

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

जब मैं जावास्क्रिप्ट फाइलें खुद बनाता हूं और उन्हें आयात करता हूं, तो वे ठीक से काम करते हुए प्रतीत होते हैं। हो सकता है कि अंडरस्कोर लाइब्रेरी के साथ कुछ खास हो?

जवाबों:


169

नोड 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
धन्यवाद। वह सीधा था।
ज्योफ

6
मैं अब 30 मिनट के लिए अपने कीबोर्ड के खिलाफ अपना सिर पीट रहा हूं, इसके लिए धन्यवाद!
रॉसपेडिया

3
यही कारण है कि SO भयानक है। इस तरह के महान जवाब "सिर पीटने" के घंटे बचाते हैं। थैंक्यू @ माइक
ब्रायन ट्रेसी


194

आज (30 अप्रैल, 2012) तक आप अपने Node.js कोड पर हमेशा की तरह अंडरस्कोर का उपयोग कर सकते हैं। पिछली टिप्पणियाँ सही इंगित कर रही हैं कि REPL इंटरफ़ेस (नोड की कमांड लाइन मोड) अंतिम परिणाम को होल्ड करने के लिए "_" का उपयोग करता है, लेकिन BUT को आप अपनी कोड फ़ाइलों पर इसका उपयोग करने के लिए स्वतंत्र हैं और यह मानक द्वारा समस्या के बिना काम करेगा:

var _ = require('underscore');

हैप्पी कोडिंग!


7
ध्यान दें, यदि आप अंडरस्कोर को वैश्वीकरण करने की कोशिश करते हैं तो यह काम नहीं करता है: gist.github.com/3220108
लांस पोलार्ड

9
किसी ने एक बार मुझे बताया था कि सभी विकास भाषाओं पर ग्लोबल्स खराब हैं। मुझे उन मॉड्यूल पर var _ = आवश्यकता ('अंडरस्कोर') निर्दिष्ट करने में कोई समस्या नहीं दिखती है, जिन्हें इसकी आवश्यकता है। nodejs.org/api/modules.html#modules_caching
एरिक रूइज़ डे शावेज़

30-एप्री -2018 किस नोड संस्करण के साथ मेल खाता है?
poseid

अप्रैल 2012 0.6 से मेल खाती है।
एरिक रुइज़ डे शावेज़

एरिक, यह एक समस्या है यदि आप क्लाइंट साइड कोड को सर्वर साइड पर भी पुन: उपयोग करने की कोशिश कर रहे हैं।
ब्रैंडन



-3

नोट: निम्नलिखित केवल कोड की अगली पंक्ति के लिए काम करता है, और केवल एक संयोग के कारण।

लोदाश के साथ,

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

नहीं var _ = require('lodash')जब से लॉडश रहस्यमय तरीके से आवश्यकता पड़ने पर इस मूल्य को निर्धारित करता है।


नहीं, यह दर्ज या कुछ और के साथ काम नहीं करेगा। यह आपके उदाहरण में काम करता है क्योंकि, जैसा कि ऊपर कहा गया है, नोड अंतिम विवरण के परिणाम को निर्धारित करता है _। आपके अंतिम कथन का परिणाम दर्ज किया गया परिवाद था। तो अगली पंक्ति_.isArray([]) पर काम करेंगे , लेकिन फिर कभी नहीं।
मार्क कहन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.