द्वारा आवश्यकता या सीधे के माध्यम से बुलाया गया है, तो मैं कैसे पता लगा सकता हूं कि मेरी नोड.जेएस फ़ाइल को SH: node path-to-file
या JS: require('path-to-file')
का उपयोग करके कॉल किया गया था या नहीं? यहां इस बात के लिए How can I run my Perl script only if it wasn't loaded with require?नोड.जेएस: पता लगाएँ कि कमांड लाइन
उत्तर
if (require.main === module) {
console.log('called directly');
} else {
console.log('required as a module');
}
दस्तावेज़ देखें: https://nodejs.org/docs/latest/api/all.html#modules_accessing_the_main_module
धन्यवाद निकोलस (और जेसी) –
क्या इसके आसपास जाने का कोई तरीका है? मेरे पास कोड है (जिस पर मेरा नियंत्रण नहीं है) जो ऐसा करता है, लेकिन मुझे इसकी आवश्यकता होती है() इसे और इसे कार्य करने की आवश्यकता होती है जैसे कि इसे सीधे कहा जाता है। असल में, मुझे ऐसा कुछ बेवकूफ़ बनाने की ज़रूरत है जो उस परीक्षण का उपयोग सोचने में सीधे करे जिसे इसे सीधे कहा जाता था। – Kevin
@ केविन मुझे 'आवश्यकता() 'के साथ ऐसा करने के बारे में पता नहीं है, लेकिन आप इसे फ़ाइल आयात करने के बाद या फिर' eval' 'चलाकर या' आवश्यकता ('child_process') चलाकर निष्पादित कर सकते हैं। Exec ('node the_file.js') ' – MalcolmOcean
एक और, थोड़ा छोटा रास्ता है (उल्लेख में उल्लिखित नहीं
यह Node.js मेरे पिछले प्रश्न के बराबर पर्ल में है दस्तावेज़)।
var runningAsScript = !module.parent;
मैं कैसे इस बारे में अधिक जानकारी उल्लिखित this blog post में हुड के नीचे सभी काम करता है।
+1, मुझे यह बेहतर पसंद है, लेकिन स्वीकार्य उत्तरों को स्विच करने से पहले मैं संकोच करूंगा। :) –
जैसा कि मैंने संकेत दिया है, दस्तावेजीकृत आधिकारिक तरीका एक @nicolaskruchten उल्लिखित है। यह सिर्फ एक विकल्प है, स्वीकृत उत्तर स्विच करने की कोई आवश्यकता नहीं है। दोनों कार्य। –
मुझे दस्तावेज़ के बजाय इसका उपयोग करना था - दस्तावेज के तरीके उदाहरण के लिए काम करता है। 'node script.js' लेकिन' cat script.js नहीं node'। इस तरह दोनों के लिए काम करता है। –
मैं स्पष्टीकरण में उपयोग की जाने वाली शब्दावली से थोड़ा उलझन में था। तो मुझे कुछ त्वरित परीक्षण करना पड़ा।
मैंने पाया कि इन का उत्पादन एक ही परिणाम:
var isCLI = !module.parent;
var isCLI = require.main === module;
और दूसरी उलझन में लोगों के लिए (और सवाल सीधे जवाब देने के लिए):
var isCLI = require.main === module;
var wasRequired = !isCLI;
, मैं हमेशा लगता है मैं यह याद रखने की कोशिश कर रहा हूं कि इस देवता कोड स्निपेट को कैसे लिखना है। तो मैंने इसके लिए एक साधारण मॉड्यूल बनाने का फैसला किया। कॉलर की मॉड्यूल की जानकारी तक पहुंचने के बाद से मुझे विकसित करने में थोड़ा सा लगा, लेकिन यह देखना मजेदार था कि यह कैसे किया जा सकता है।
तो विचार मॉड्यूल को कॉल करना और पूछना है कि कॉलर मॉड्यूल मुख्य है या नहीं। हमें कॉलर फ़ंक्शन के मॉड्यूल को समझना होगा। मेरा पहला दृष्टिकोण स्वीकृत उत्तर की एक भिन्नता थी:
module.exports = function() {
return require.main === module.parent;
};
लेकिन यह काम करने की गारंटी नहीं है। module.parent
मॉड्यूल को इंगित करता है जो हमें स्मृति में लोड करता है, जिसे हम कॉल नहीं करते हैं। अगर यह कॉलर मॉड्यूल था जो इस सहायक मॉड्यूल को स्मृति में लोड करता था, तो यह ठीक है। लेकिन अगर यह नहीं था, हम असहाय हैं। तो हमें कुछ और करने की कोशिश करनी है। अब हम क्या कर सकते हैं
module.exports = function() {
// generate a stack trace
const stack = (new Error()).stack;
// the third line refers to our caller
const stackLine = stack.split("\n")[2];
// extract the module name from that line
const callerModuleName = /\((.*):\d+:\d+\)$/.exec(stackLine)[1];
return require.main.filename === callerModuleName;
};
:: मेरे समाधान एक स्टैक ट्रेस पैदा करते हैं और वहां से फोन करने वाले का मॉड्यूल का नाम मिल गया था
if (require("./is-main-module")()) { // notice the `()` at the end
// do something
} else {
// do something else
}
या अधिक पठनीय:
const isMainModule = require("./is-main-module");
if (isMainModule()) {
// do something
} else {
// do something else
}
असंभव भूल जाते हैं :-)
बहुत अच्छा। मुझे यह पसंद है जब सामान्य कोड स्निपेट को एक ही नाम से संक्षिप्त किया जाता है। छोटे समायोजन: 'वापसी की ज़रूरत है। मेन/* यह अनिर्धारित है अगर हमने नोड को इंटरैक्टिव */&& requ.main.filename === callerModuleName शुरू किया; ' – masterxilo
- 1. डब्ल्यूपीएफ: पता लगाएँ कि खिड़की फोकस
- 2. पता लगाएँ कि क्या डेटा डेटाैकेंटेक्स्ट
- 3. jQuery: पता लगाएँ कि तत्व मौजूद है
- 4. नोड.जेएस कमांड लाइन कंसोल लॉग लेवल
- 5. पता लगाएँ एंटर कुंजी jquery
- 6. पता लगाएँ कि ब्राउज़र स्थिति का समर्थन करता है: निश्चित
- 7. पता लगाएँ कि ब्राउज़र राइट-क्लिक ईवेंट ओवरराइडिंग
- 8. jQuery - पता लगाएँ कि घटना शुरू हो रहा
- 9. पता लगाएँ कि कितने द्विआधारी अंकों एक विशेष पूर्णांक
- 10. पता लगाएँ कि आईई में फ़ॉन्ट डाउनलोड सक्षम है
- 11. पता लगाएँ कि iframe क्रॉस-डोमेन है, तो इसे
- 12. पता लगाएँ एंड्रॉइड वेबव्यू यूआरएल स्थान परिवर्तन
- 13. कमांड लाइन
- 14. कमांड लाइन
- 15. कमांड लाइन
- 16. कमांड लाइन
- 17. कमांड-लाइन
- 18. कमांड लाइन
- 19. कमांड लाइन
- 20. कमांड लाइन
- 21. कमांड लाइन
- 22. कमांड लाइन
- 23. कमांड लाइन
- 24. कमांड लाइन
- 25. कमांड लाइन
- 26. कमांड लाइन
- 27. कमांड लाइन कमांड
- 28. कमांड लाइन - कमांड लूप
- 29. विम में कैसे पता लगाएं कि कमांड
- 30. कमांड लाइन
[node.js के पाइथन के बराबर डुप्लिकेट \ _ \ _ नाम \ _ \ _ == '\ _ \ _ मुख्य \ _ \ _'] (http://stackoverflow.com/प्रश्न/49818 9 1/नोड-जेएस-समकक्ष-के-पायथन-अगर-नाम-मुख्य) – GingerPlusPlus