fs.readFileSync फ़ाइल सापेक्ष नहीं है? Node.js


112

-समझो कि मेरे पास "file.xml" नामक मेरे प्रोजेक्ट की जड़ में एक फाइल है

-साथ ही मेरे पास परीक्षणों में एक परीक्षण फ़ाइल है / जिसे "test.js" कहा जाता है और इसमें है

const file = fs.readFileSync("../file.xml");

अगर मैं अब node ./tests/test.jsअपने प्रोजेक्ट की जड़ से चलता हूं तो यह कहता है ../file.xml मौजूद नहीं है। यदि मैं परीक्षण निर्देशिका के भीतर से एक ही कमांड चलाता हूं, तो यह काम करता है।

ऐसा लगता है कि fs.readFileSync उस निर्देशिका के सापेक्ष है जहाँ स्क्रिप्ट वास्तव में है, इसके बजाय जहां स्क्रिप्ट है। अगर मैंने fs.readFileSync("./file.xml")test.js में लिखा है तो यह अधिक भ्रामक लगेगा और एक आवश्यक कथन में सापेक्ष पथों के अनुरूप नहीं है जो कि फ़ाइल सापेक्ष हैं।

ऐसा क्यों है?

मैं अपने fs.readFileSync में पथों को फिर से लिखने से कैसे बच सकता हूं?


4
__dirnameजरूरी नहीं कि वर्तमान वर्किंग डायरेक्टरी के समान ही हो, लेकिन fs.readFileSync()वर्तमान वर्किंग डायरेक्टरी का उपयोग करता है। जब आपने नोड लॉन्च किया था, तो यह वर्तमान कार्यशील निर्देशिका के लिए सेट है।
jfriend00

जवाबों:


195

आप स्रोत फ़ाइल के स्थान के सापेक्ष पथ को हल कर सकते हैं - वर्तमान निर्देशिका के बजाय - उपयोग करते हुए path.resolve:

const path = require("path");
const file = fs.readFileSync(path.resolve(__dirname, "../file.xml"));

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

12
क्योंकि सापेक्ष रास्तों को वर्तमान निर्देशिका का उपयोग करके हल किया जाता है। और आप एक अलग निर्देशिका का उपयोग करके हल करना चाहते हैं। से डॉक्स : "एक फ़ाइल नाम के सापेक्ष पथ इस्तेमाल किया जा सकता याद रखें, हालांकि, कि इस मार्ग process.cwd () के सापेक्ष किया जाएगा।।"
कार्टन

किसी कारण से मैंने इसे अपने सिर में ले लिया, क्योंकि स्थानीय फ़ाइल मेरे दूरस्थ वातावरण पर काम नहीं कर रही थी। एक पूर्ण यूआरएल द्वारा फ़ाइल प्राप्त करने की आवश्यकता होगी। हालांकि, निश्चित रूप से मैंने नहीं किया है और मैं .. मेरी दूरस्थ सर्वर पर निरपेक्ष पथ को हल करने के लिए इस विधि का उपयोग करने में सक्षम था
weaveoftheride
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.