আপনার কি node.js এ path.join ব্যবহার করা দরকার?


134

যেহেতু সবাই জানে উইন্ডোজ ব্যাকস্ল্যাশ দিয়ে পাথ করে যেখানে ইউনিক্স ফরোয়ার্ড স্ল্যাশ সহ পাথ করে। node.js path.join()সর্বদা সঠিক স্ল্যাশ ব্যবহার করতে সরবরাহ করে। সুতরাং উদাহরণস্বরূপ ইউনিক্স লেখার পরিবর্তে কেবল 'a/b/c'আপনি path.join('a','b','c')পরিবর্তে এটি করবেন ।

তবে, মনে হয় এই পার্থক্য থাকা সত্ত্বেও যদি আপনি আপনার পাথগুলিকে সাধারন না করেন (উদাহরণস্বরূপ Path.join ব্যবহার করে) এবং কেবল নোড.জেসের মতো পাথ লিখুন তবে a/b/cউইন্ডোতে আপনার স্ক্রিপ্টগুলি চালাতে সমস্যা নেই।

তাহলে লেখার path.join('a','b','c')উপর দিয়ে কোনও লাভ আছে 'a/b/c'? উভয়ই প্ল্যাটফর্ম নির্বিশেষে কাজ করতে দেখা যায় ...

উত্তর:


106

উইন্ডোজ ফাইল সিস্টেমে পাথ বিভাজক হিসাবে ফরোয়ার্ড বা পিছনের স্ল্যাশগুলি ব্যবহার করতে কোনও সমস্যা নেই (ডস দিনের পরে থেকে এটিই এরকম হয়েছে)। একমাত্র আসল ইস্যুটি হ'ল উইন্ডোজ কমান্ড-লাইন প্রসেসরগুলি (বা আরও নির্দিষ্টভাবে উইন্ডোজ-নেটিভ কমান্ড-লাইন ইউটিলিটিস) পথের উপাদানগুলির পরিবর্তে ফরোয়ার্ড স্ল্যাশগুলি বিকল্প স্পেসিফায়ার হিসাবে ব্যাখ্যা করতে থাকে। সুতরাং, আপনার যদি একটি সাবস্রোস হিসাবে চালিত উইন্ডোজ কমান্ডের কোনও পথ পাস করার দরকার হয় তবে আপনার ব্যাকস্ল্যাশড পাথ প্রয়োজন। এছাড়াও, উইন্ডোজ এপিআই কলগুলি (এবং উইন্ডোজ এপিআই বলে যে উচ্চ স্তরের ভাষা থেকে পদ্ধতিগুলি) যেগুলি ফেরত পাথগুলি ব্যাকস্ল্যাশ ব্যবহার করবে, তাই আপনি যদি সেগুলি সাব-প্রসেসগুলিতে নাও পাঠিয়ে থাকেন তবে আপনাকে সেগুলি স্বাভাবিক করার প্রয়োজন হবে।


ফরোয়ার্ড স্ল্যাশগুলি ইউএনসি পথগুলিও ভেঙে দেয়।
ব্যবহারকারী 2426679

এই উত্তরটি কেন সাধারণত টি নোড.জেএস অ্যাপ্লিকেশনগুলিতে ব্যবহার করে তা পরিষ্কার করে না। অথবা সম্ভবত এটি আমার কাছে পাচ্ছে না। যদিও এটি আকর্ষণীয় ছিল।
ঘেরম্যান

95

path.join অনুপযুক্ত সীমানারদের যত্ন নেবে, যদি প্রদত্ত প্যাথগুলি অজানা উত্স থেকে আসে (যেমন, ব্যবহারকারী ইনপুট, তৃতীয় পক্ষের API গুলি ইত্যাদি)।

সুতরাং path.join('a/','b') path.join('a/','/b'), path.join('a','b')এবং path.join('a','/b')সব দেবে a/b

এটি ব্যবহার না করে, আপনি সাধারণত প্যাথগুলিতে যোগ দিয়ে শুরু এবং শেষের বিষয়ে প্রত্যাশা তৈরি করতেন, জেনে যে তাদের কেবল একটি বা একটি স্ল্যাশ নেই knowing


এটি কিছুটা কার্যকর বলে মনে হচ্ছে তবে অজানা উত্স থেকে নির্বিচারে চেক না করা পথগুলি পাওয়া বড় সুরক্ষা সমস্যার মতো মনে হচ্ছে। এটি প্রায়শই করার মতো কিছু নয়।
গেরম্যান

50

আমি path.joinফোল্ডার বিভাজকগুলি সঠিক জায়গায় রয়েছে তা নিশ্চিত করতে ব্যবহার করি, এটি নিশ্চিত করার জন্য যে এটি পিছনে পিছনে স্ল্যাশগুলির তুলনায় সামনের দিকে ব্যবহার করে। উদাহরণ স্বরূপ:

path.join("/var/www", "test")

Www এবং পরীক্ষার মধ্যে বিভাজক সঠিকভাবে সন্নিবেশ করবে /var/www/test


2
আমি এই বিষয়টি বুঝতে পারি না। আপনার যদি ভেরিয়েবলগুলিতে এই স্ক্রিপ্টগুলি থাকে তবে কেন কেবল ম্যানুয়ালি স্ল্যাশ যুক্ত করবেন না?
মিলিগোল

2
আমার এই উত্তরটি বুঝতে সমস্যা হয়। কোনও মান দেখতে পাচ্ছেন না।
অলিগোফ্রেন

23
কারণ আমি সর্বদা নিশ্চিত নই যে আমি অন্যান্য উত্সগুলি থেকে যে পথের মান পাই সেগুলি পিছনে পিছনে থাকবে or আমার উপরের উদাহরণটি স্বীকৃত ছিল। প্রায়শই এই পাথগুলি হার্ড কোডিং হয় না তবে এগুলি অন্য কনফিগারেশন ফাইল, ব্যবহারকারী ইনপুট, লাইব্রেরি ইত্যাদির থেকে টানা হয়
টিমোথি স্ট্রিম্পেল

@TimothyStrimple ~ ব্যবহারের একটি ভাল জায়গা path.joinআপনার অন্য উত্তরে এখানে হবে stackoverflow.com/questions/9027648/... । এই উত্তরটি আমাকে এখানে নিজের দ্বারা উত্তর দেওয়া অন্য প্রশ্নের দিকে নিয়ে গেছে :)
পেব্ল

23
5 মিনিট পরে আমার কোডটি বজায় না হওয়া পর্যন্ত আমি সে উত্তর সম্পর্কে সন্দেহবাদী ছিলাম return baseDir + relativePath + filename;। আমি এখনই এটি প্রতিস্থাপন return path.join(baseDir, relativePath, filename);। এটি সত্যিই খুব সহায়ক!
পেড্রো

34

সংক্ষিপ্ত উত্তর:

সমস্ত fs.*ফাংশন (যেমন। fs.openইত্যাদি) আপনার জন্য পথের নাম ব্যবহার করে। সুতরাং, আপনার path.joinনিজের ব্যবহার এবং আপনার কোডটি অবৈধ করার দরকার নেই।

দীর্ঘ উত্তর:

সমস্ত fs.*ফাংশন কল করে path._makeLong(path), যার পরিবর্তে কল হয় path.resolve(path), যার উইন্ডোজের জন্য বিশেষ রেজিপ্স রয়েছে, যা ব্যাকস্ল্যাশ \বা ফরোয়ার্ড স্ল্যাশকে বিবেচনা করে /। আপনি তাদের উত্স কোডটি নিজের জন্য এটি পরীক্ষা করে দেখতে পারেন:

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.