अपने Mac पर किसी npm स्क्रिप्ट द्वारा उपयोग की जाने वाली डायरेक्टरी खोजने के लिए, जाँचें कि कौन सा पैकेज उस स्क्रिप्ट का स्वामी है, फिर उस स्क्रिप्ट के अंदर से डायरेक्टरी प्रिंट करें। npm स्क्रिप्ट को उसके पैकेज फ़ोल्डर से चलाता है, भले ही आप npm run कहीं और से शुरू करें। वर्कस्पेस प्रोजेक्ट में, चयनित वर्कस्पेस पैकेज संबंधित फ़ोल्डर हो सकता है। नीचे दिए गए चरण आपको सटीक पथ की पहचान करने और इसे उस फ़ोल्डर से अलग करने में मदद करते हैं जहाँ आपने कमांड टाइप किया था।
1. वह पैकेज और स्क्रिप्ट खोजें जिसे आप चला रहे हैं
Terminal खोलें और उस प्रोजेक्ट फ़ोल्डर में जाएँ जहाँ आप सामान्य रूप से npm चलाते हैं। macOS Terminal में डिफ़ॉल्ट रूप से zsh का उपयोग करता है, हालाँकि आपका शेल बदला जा सकता है। अपनी वर्तमान डायरेक्टरी प्रदर्शित करने के लिए pwd का उपयोग करें, फिर यह देखने के लिए फ़ाइलों को सूचीबद्ध करें कि क्या उस फ़ोल्डर में package.json फ़ाइल है। Apple की Terminal गाइड Terminal में कमांड दर्ज करने और ls जैसे टूल्स का उपयोग करने के बारे में बताती है।
pwd
ls
यदि आप अनिश्चित हैं कि कौन सा पैकेज स्क्रिप्ट को परिभाषित करता है, तो वर्तमान फ़ोल्डर में package.json का निरीक्षण करें। आप इसे cat package.json के साथ प्रदर्शित कर सकते हैं, या इसे किसी टेक्स्ट एडिटर में खोल सकते हैं। scripts ऑब्जेक्ट के तहत स्क्रिप्ट का नाम खोजें। उदाहरण के लिए, "scripts": { "build": "node build.js" } में, चलाने के लिए स्क्रिप्ट का नाम build है। यदि यह एक वर्कस्पेस रिपॉजिटरी है, तो यह मान न लें कि टॉप-लेवल प्रोजेक्ट फ़ोल्डर ही स्क्रिप्ट का स्वामी है।
2. npm की अपेक्षित डायरेक्टरी की जाँच करें
वर्तमान npm संस्करणों के लिए, स्क्रिप्ट पैकेज फ़ोल्डर के रूट से चलती हैं, भले ही आपने जिस डायरेक्टरी से npm run इनवोक किया हो। एक मानक प्रोजेक्ट में, यह वह फ़ोल्डर है जिसमें पैकेज का package.json होता है। एक वर्कस्पेस प्रोजेक्ट में, npm किसी चयनित वर्कस्पेस के संदर्भ में स्क्रिप्ट चला सकता है; वर्कस्पेस का पैकेज वह है जिसकी जाँच की जानी चाहिए। स्क्रिप्ट वर्किंग डायरेक्टरीज़ और वर्कस्पेस में स्क्रिप्ट चलाने पर npm का दस्तावेज़ीकरण देखें।
यह प्रलेखित व्यवहार एक अच्छा शुरुआती उत्तर है, लेकिन यदि स्क्रिप्ट आंतरिक रूप से डायरेक्टरी बदलती है या आपको यह पुष्टि करने की आवश्यकता है कि कोई विशेष कमांड क्या देखती है, तो निष्पादन के दौरान पथ प्रिंट करें। स्क्रिप्ट के अंदर cd जैसा शेल कमांड इसके बाद आने वाले कमांड के लिए डायरेक्टरी बदल सकता है, इसलिए केवल पैकेज फ़ोल्डर ही पूरी कहानी नहीं बता सकता है।
3. स्क्रिप्ट के अंदर से डायरेक्टरी प्रिंट करें
सबसे स्पष्ट जाँच package.json में स्क्रिप्ट कमांड की शुरुआत में अस्थायी रूप से pwd जोड़ना है। उदाहरण के लिए, इसे बदलें:
"build": "node build.js"
इसमें:
"build": "pwd && node build.js"
फिर हमेशा की तरह स्क्रिप्ट चलाएँ:
npm run build
बिल्ड कमांड से पहले प्रिंट किया गया पथ उस बिंदु पर शेल की वर्किंग डायरेक्टरी है। यह डायग्नोस्टिक && का उपयोग करता है, इसलिए node build.js केवल तभी चलता है जब pwd सफल होता है। जाँच के बाद, डायग्नोस्टिक प्रीफ़िक्स हटा दें और मूल कमांड को रीस्टोर करें। सहेजने से पहले फ़ाइल की समीक्षा करें यदि मूल स्क्रिप्ट पहले से ही शेल ऑपरेटरों, कोट्स या रैपर कमांड का उपयोग करती है; इसके इच्छित क्रम और सिंटैक्स को बनाए रखें।
यदि स्क्रिप्ट एक Node.js फ़ाइल है और आप इसे संपादित कर सकते हैं, तो एक अन्य प्रत्यक्ष जाँच इसकी शुरुआत के पास अस्थायी रूप से console.log(process.cwd()) जोड़ना है। Node, process.cwd() को Node.js प्रोसेस की वर्तमान वर्किंग डायरेक्टरी के रूप में प्रलेखित करता है। यह उस डायरेक्टरी की रिपोर्ट करता है जिसे लाइन निष्पादित होने पर Node देखता है; यदि प्रोग्राम बाद में अपनी वर्किंग डायरेक्टरी बदलता है, तो मान बदल सकता है।
4. परिणाम पढ़ें और वर्कस्पेस का ध्यान रखें
प्रिंट किए गए पथ की तुलना npm चलाने से पहले pwd द्वारा दिखाए गए पथ से करें। वे भिन्न हो सकते हैं: npm की स्क्रिप्ट डायरेक्टरी पैकेज रूट है, जबकि आपकी Terminal डायरेक्टरी वह है जहाँ आपने कमांड लॉन्च किया था। उदाहरण के लिए, यदि आपका Terminal किसी रिपॉजिटरी रूट में शुरू होता है लेकिन आप packages/site के तहत किसी पैकेज द्वारा परिभाषित स्क्रिप्ट चलाते हैं, तो स्क्रिप्ट का पैकेज संदर्भ वह वर्कस्पेस हो सकता है। npm --workspace के साथ किसी एक को चुनने का दस्तावेज़ीकरण करता है; आप वर्कस्पेस डायरेक्टरी के अंदर से भी स्क्रिप्ट चला सकते हैं।
npm run build --workspace=site
उस वर्कस्पेस नाम या पथ का उपयोग करें जो प्रोजेक्ट के workspaces कॉन्फ़िगरेशन से मेल खाता हो। यदि आउटपुट अप्रत्याशित है, तो पुष्टि करें कि आपने सही स्क्रिप्ट और वर्कस्पेस का चयन किया है, फिर जाँचें कि क्या स्क्रिप्ट में स्वयं cd है या किसी अन्य टूल को लागू करती है जो डायरेक्टरी बदलता है। चाइल्ड प्रोसेस की अपनी वर्किंग-डायरेक्टरी सेटिंग भी हो सकती है; यदि इसका व्यवहार पैरेंट स्क्रिप्ट से भिन्न है तो उस टूल के कॉन्फ़िगरेशन का निरीक्षण करें।
INIT_CWD आपको क्या बताता है
npm उस डायरेक्टरी के लिए INIT_CWD प्रदान करता है जिसमें आप npm run लागू करते समय थे। वह मान तब मदद कर सकता है जब किसी स्क्रिप्ट को यह जानने की आवश्यकता होती है कि कॉलर कहाँ से शुरू हुआ था, लेकिन यह स्क्रिप्ट की वर्तमान वर्किंग डायरेक्टरी नहीं है। रनिंग प्रोसेस जिस डायरेक्टरी को देखती है उसका निरीक्षण करने के लिए शेल स्क्रिप्ट के अंदर pwd या Node.js के अंदर process.cwd() का उपयोग करें। यह अंतर विशेष रूप से तब उपयोगी होता है जब कोई रिलेटिव फ़ाइल पथ एक इनवोकेशन स्थान से काम करता है लेकिन दूसरे से नहीं।
त्वरित निदान के लिए, npm के पैकेज-रूट नियम से शुरुआत करें, यदि आवश्यक हो तो इच्छित वर्कस्पेस का चयन करें, और जिस बिंदु पर यह चलती है उस पर वास्तविक पथ की पुष्टि करने के लिए स्क्रिप्ट के अंदर pwd प्रिंट करें।
स्रोत
Scripts — npm Docs
Workspaces — npm Docs
Process — Node.js
Execute commands and run tools in Terminal on Mac — Apple Support
Change the default shell in Terminal on Mac — Apple Support