2015-06-24 10 views
6

मैं बहुत यकीन है कि मैं गलत कर रहा हूँ होना चाहिए लेकिन नोड में, path.relative उत्पादन गलत निर्देशिका करने लगता है, या कम से कम एक मैं उम्मीद नहीं थी रिटर्न:नोड path.relative गलत पथ

> path.relative('a/file.js', 'a/file.css') 
> '../file.css' 

हालांकि मैं परिणाम उम्मीद होती है कुछ की तरह बनना:

> './file.css' 

सार मैं एक फ़ाइल के लिए क्रम में दो रास्तों में अंतर की गणना करने के कोशिश कर रहा हूँ में require अन्य और ../file.css को स्पष्ट रूप से गलत है मेरी दोनों के रूप में की आवश्यकता होती है के लिए फ़ाइलेंमें हैंनिर्देशिका। आउटपुट से पता चलता है कि file.css मूल निर्देशिका में है।

मुझे क्या याद आ रही है?

उत्तर

4

जहां तक ​​मैं कह सकता हूं, path.relative() फ़ाइल के बजाए फ़ोल्डर को इसके पहले तर्क के रूप में अपेक्षा करता है। यह काम करता है:

path.relative('a', 'a/file.css') 
> 'file.css' 

यहाँ path.relative के लिए स्रोत कोड है: https://github.com/joyent/node/blob/master/lib/path.js#L504-L530 https://github.com/joyent/node/blob/master/lib/path.js#L265-L304

(नोट: मामले लाइन नंबर भविष्य में बदल में, यहाँ स्रोत का लिंक है के रूप में यह समय में है मैं यह लिख रहा हूं: https://github.com/nodejs/node-v0.x-archive/blob/94beb2985b4cb25e592a9ccc226f6c824a81e510/lib/path.js।)

जैसा कि आप वहां देख सकते हैं, पथ उनमें स्लेश से विभाजित होते हैं और यह बस भागों की संख्या की तुलना करता है, इसलिए यदि आप फ़ाइल को पास करते हैं तो यह काम नहीं करता है एक फ़ोल्डरके रूप में 10 तर्क

यह एक बग हो सकता है, या कम से कम बेहतर दस्तावेज होना चाहिए। आप यहां एक बग रिपोर्ट सबमिट कर सकते हैं: https://github.com/joyent/node/issues/new

+0

हाँ मैंने अभी इसे स्वयं समझ लिया है। मैंने सिर्फ उन दस्तावेज़ों से धारणा की है कि फ़ाइल नाम कुछ अन्य 'पथ' विधियों में काम करते हैं। धन्यवाद! –

+1

यह वास्तव में परवाह नहीं करता है कि यह फ़ाइल या फ़ोल्डर दिया गया है या नहीं। यह भी नहीं जानता है। 'path.relative ('a/file.js', 'a/file.css')' path.relative ('a/b', 'a/file.css') जैसा ही है, और आप बस दूसरे स्तर पर कटा हुआ। – eush77

+1

@ eush77 अच्छा बिंदु, लेकिन मुझे लगता है कि यह अभी भी एक फ़ोल्डर की उम्मीद कर रहा है ... असल में यह शायद इस धारणा के साथ लिखा गया था कि दोनों तर्क फ़ोल्डर्स होंगे। दूसरे शब्दों में, फ़ंक्शन को संभवतः तर्कों के रूप में दोनों फ़ाइलों और फ़ोल्डर्स का समर्थन करने के लिए लिखा गया प्रतीत नहीं होता है। –

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