2012-01-14 7 views
51

मैं सिर्फ node.js के साथ शुरू कर रहा हूं और मुझे पाइथन के साथ कुछ अनुभव है। पायथन में मैं जांच सकता हूं कि __name__ वैरिएबल "__main__" पर सेट किया गया था, और यदि मुझे पता था कि मेरी स्क्रिप्ट सीधे चल रही है। उस स्थिति में मैं परीक्षण कोड चला सकता हूं या सीधे अन्य तरीकों से मॉड्यूल का उपयोग कर सकता हूं।क्या मैं जानता हूं, node.js में, अगर मेरी स्क्रिप्ट सीधे चल रही है या किसी अन्य स्क्रिप्ट द्वारा लोड की जा रही है?

क्या node.js में कुछ भी समान है?

+0

[node.js के पाइथन के बराबर डुप्लिकेट \ _ \ _ नाम \ _ \ _ == '\ _ \ _ मुख्य \ _ \ _'] (http://stackoverflow.com/questions/4981891/node- जेएस-समकक्ष-के-पायथन-अगर-नाम-मुख्य) –

उत्तर

84

आप यह निर्धारित करने के लिए module.parent का उपयोग कर सकते हैं कि वर्तमान स्क्रिप्ट किसी अन्य स्क्रिप्ट द्वारा लोड की गई है या नहीं।

उदा।

a.js:

if (!module.parent) { 
    console.log("I'm parent"); 
} else { 
    console.log("I'm child"); 
} 

b.js:

require('./a') 

रन node a.js इच्छा उत्पादन:

I'm parent 

रन node.b.js इच्छा उत्पादन:

I'm child 
+0

बिल्कुल सही। पाइथन – Hubro

+0

से भी अधिक क्लीनर दिखता है आप 'module.main' का भी उपयोग कर सकते हैं जो – Raynos

+10

@Raynos है, मुझे लगता है कि आपका मतलब है' requ.main === मॉड्यूल' (http://nodejs.org/api/ पर आधिकारिक अनुशंसा modules.html)। – chbrown

9

दोनों विकल्प !module.parent और require.main === module काम। यदि आप अधिक जानकारी में रुचि रखते हैं तो कृपया my detailed blog post about this topic पढ़ें।

+0

लिंक 404 लेकिन अन्यथा अच्छी जानकारी। – cchamberlain

+1

ध्यान देने के लिए धन्यवाद, लिंक तय करें। –

34

स्वीकृत उत्तर ठीक है। मैं पूर्णता के लिए the official documentation से इस एक जोड़ रहा:

मुख्य मॉड्यूल

जब एक फ़ाइल नोड से सीधे चलाया जाता है, require.main अपने module पर सेट किया जाता एक्सेस करना। इसका मतलब है कि आप यह निर्धारित है कि कर सकते हैं कि एक फ़ाइल यदि node foo.js के माध्यम से चलाने के लिए, इस true हो जाएगा

require.main === module 

परीक्षण एक फ़ाइल "foo.js" के लिए सीधे चलाया जा रहा है, लेकिन false अगर require('./foo') द्वारा चलाए।

क्योंकि module एक filename संपत्ति (सामान्य रूप से __filename के बराबर) प्रदान करता है, वर्तमान आवेदन की प्रवेश बिंदु require.main.filename की जाँच करके प्राप्त किया जा सकता।

संबंधित मुद्दे

 संबंधित मुद्दे