পাথ.সলভ এবং পাথ.জয়িনের আহ্বানের মধ্যে পার্থক্য?


উত্তর:


255

দুটি ক্রিয়াকলাপগুলি বিভাগগুলির সাথে /বিভিন্নভাবে শুরু হয় ; joinএটি কেবল পূর্ববর্তী যুক্তি দিয়ে একত্রিত করবে, তবে resolveএটিকে মূল ডিরেক্টরি হিসাবে বিবেচনা করবে এবং সমস্ত পূর্ববর্তী পাথ উপেক্ষা করবে - cdপ্রতিটি যুক্তির সাথে সম্পাদনের ফলাফল হিসাবে এটি ভাবেন :

path.join('/a', '/b') // Outputs '/a/b'

path.resolve('/a', '/b') // Outputs '/b'

আরেকটি বিষয় লক্ষণীয় তা হ'ল path.resolveসর্বদা একটি নিখুঁত ইউআরএল তৈরি হবে এবং এই পথটি সমাধানের জন্য আপনার কার্যক্ষম ডিরেক্টরিটি বেস হিসাবে ব্যবহার করবে। তবে __dirnameযেভাবেই হোক এটি একটি পরম পথ হিসাবে এটি আপনার ক্ষেত্রে গুরুত্বপূর্ণ নয়।

আপনার কোনটি ব্যবহার করা উচিত, উত্তরটি: এটি আপনি কীভাবে বিভাগগুলি শুরু করতে চান তার উপর নির্ভর করে / আচরণ - এগুলি কী কেবল যোগ দেওয়া উচিত বা তাদের নতুন মূল হিসাবে কাজ করা উচিত?

যদি অন্য যুক্তিগুলি কঠোরভাবে কোড করা থাকে তবে এটি কোনও বিষয় নয়, এক্ষেত্রে আপনার সম্ভবত বিবেচনা করা উচিত (ক) ভবিষ্যতে এই লাইনটি কীভাবে পরিবর্তিত হতে পারে এবং (খ) কোডের অন্যান্য জায়গাগুলির সাথে এটি কতটা সামঞ্জস্যপূর্ণ।


64
আপনি এখনও না পেলে: path.join('/a', '/b', 'c')ফিরে আসবেন /a/b/c, আবার path.resolve('/a', '/b', 'c')ফিরে আসবেন /b/c।
— টটিমেডলি

28
আমি বলব নামটি resolveসবচেয়ে স্পষ্ট নয়, path.cd([starting dir], [final dir])আরও স্বজ্ঞাত হবে।
— জোয়াও মধ্যে Pimentel ফেরেইরা

19
think of it as the result of executing cd with each argumentআমাকে পরিশেষে এটা বুঝতে প্রণীত। ধন্যবাদ
— আন্দ্রে Pena

@ জোওপিমেন্টেলফেরেরা, আপনি একটি বৈধ পয়েন্ট তৈরি করায় আমি উপরের উত্তরটি আপডেট করেছি। :)
— রিন Minase

সুতরাং path.resolve => কর্ম ডিরেক্টরিকে পথের সূচনা পয়েন্ট হিসাবে বিবেচনা করে পাথ সমাধান করবেন?
— ওয়েবউইম্যান

15

ফাইল সিস্টেমের পাথের ডিফল্ট ক্রিয়াকলাপগুলি অপারেটিং সিস্টেমের ভিত্তিতে পরিবর্তিত হয় আমাদের এমন কিছু জিনিস প্রয়োজন যা এটি বিমূর্ত করে। pathমডিউল ফাইল এবং ডিরেক্টরির পাথ সঙ্গে কাজ করার জন্য ইউটিলিটি বা এপিআই প্রদান করে। আপনি এটি ব্যবহার করে এটি আপনার প্রকল্পে অন্তর্ভুক্ত করতে পারেন

const path = require('path');

path.joinএবংpath.resolve পাথ মডিউলের দুটি ভিন্ন পদ্ধতি।

এই দুটি পদ্ধতিই পাথ বা পথের বিভাগগুলির একটি ক্রম গ্রহণ করে।

path.resolve()পদ্ধতি একটি মধ্যে পাথ বা পথ অংশ একটি ক্রম সমাধান করা পথটি ।

path.join()পদ্ধতি, সব দেওয়া পাথ অংশ একসঙ্গে একটি বিভেদক হিসাবে প্ল্যাটফর্ম নির্দিষ্ট বিভাজক ব্যবহার যোগদান করে তারপর ফলে পাথ normalizes।

আচরণগুলি আরও ভালভাবে বুঝতে এবং পার্থক্য করতে, আমাকে এটি বিভিন্ন পরিস্থিতি দিয়ে ব্যাখ্যা করতে দিন।

1. যদি আমরা কোনও যুক্তি বা খালি স্ট্রিং সরবরাহ না করি

আমার ক্ষেত্রে, আমার ফাইলের নাম index.jsএবং বর্তমান কার্যনির্বাহী ডিরেক্টরিE:\MyFolder\Pjtz\node

const path = require('path');

console.log("path.join() : ", path.join());
// outputs .
console.log("path.resolve() : ", path.resolve());
// outputs current directory or equalent to __dirname of the node process

এবং চলমান ফলাফল নীচে হিসাবে

λ node index.js
path.join() :  .
path.resolve() :  E:\MyFolder\Pjtz\node

উপরোক্ত পরীক্ষার অনুমানটি হ'ল থা path.resolve()পদ্ধতিটি যেখানে প্রত্যাবর্তনের সাথে সাথে নিখুঁত পথে আউটপুট দেবে path.join()। যদি কিছু সরবরাহ না করা হয় তবে বর্তমান ওয়ার্কিং ডিরেক্টরি বা আপেক্ষিক পথের প্রতিনিধিত্ব করছে

২. কোনও যুক্তি হিসাবে একটি / পাথ যুক্ত করা।

const path=require('path');

console.log("path.join() : " ,path.join('abc','/bcd'));
console.log("path.resolve() : ",path.resolve('abc','/bcd'));

এবং ফলাফল হয়

λ node index.js
path.join() :  abc\bcd
path.resolve() :  E:\bcd

এই পরীক্ষার সাহায্যে আমরা যে path.join()অনুভূতিটি পেয়েছি তা হ'ল কেবলমাত্র প্ল্যাটফর্ম নির্দিষ্ট বিভাজকের সাথে ইনপুট তালিকার সাথে সম্মতি দেয় যখন path.resolve()প্রক্রিয়াটি ডান থেকে বামে পথের ক্রম প্রক্রিয়া করে, প্রতিটি পরবর্তী পথটি নিখুঁত পাথ নির্মাণ না হওয়া অবধি প্রবর্তিত হয়।

path.join()ওএস নির্দিষ্ট বিভাজকগুলির সাথে প্রতিটি যুক্তিকে সম্মতি জানানো হয় যখন path.resolve()প্রতিটি যুক্তি মূলের সাথে সমাধান করে এবং আউটপুট উত্পাদন করে।


path.resolve()হয় সমতুল্য না করতে __dirname। প্রথমটি ওয়ার্কিং ডিরেক্টরি প্রদান করে, দ্বিতীয়টি বর্তমান ফাইলের পথ।
— এমিল বার্গারন

@ এমিলিবার্গারন আমার বোঝার মধ্যে এই দু'টিই পথ চলার কাজ। আমি মনে করি উভয়ই হরফ একইরকম পরীক্ষা করার জন্য আপনি স্নিপেট অনুসরণ করার চেষ্টা করতে পারেন const path = require('path'); console.log(path.resolve()) console.log(__dirname) console.log(path.resolve()===__dirname)
— সামুয়েলজ90

ফাইলগুলি চলমান চলমান ডিরেক্টরি ডিরেক্টরিতে চলাকালীন সেগুলি একই হয়।
— এমিল বার্গারন

@EmileBergeron ঠিক আছে আমি agree.But বসে সম্পন্ন এখনও যেখানে আমি নিদিষ্ট উপর বিভ্রান্তpath.resolve() is equivalent to __dirname
— samuelj90

1
@ এমিলিবার্গারন আমি মন্তব্যটি আপডেট করেছিলাম বলে আমি মনে করি এটি বিভ্রান্তির সমাধান করবে
— samuelj90

13

1) path.resolve পরম পথ তৈরি করে।

কোনও নিখুঁত পাথ তৈরি না হওয়া অবধি পদ্ধতিটি ডান থেকে বামে অবর্ণনীয় পথ তৈরি করে ।

উদাহরণ স্বরূপ:

path.resolve('/a', 'b', 'c');     //    C:\a\b\c
path.resolve('/a', '/b', 'c');    //    C:\b\c
path.resolve('/a', '/b', '/c');   //    C:\c

যদি নিখুঁত পাথ তৈরি না করা হয় তবে বর্তমান ওয়ার্কিং ডিরেক্টরি ব্যবহার করে পদ্ধতি:

উদাহরণ স্বরূপ:

path.resolve('a', 'b', 'c');     //    C:\{current_working_directory}\a\b\c

2) path.join সমস্ত পাথের সাথে যোগ দেয় এবং ফলাফলকে স্বাভাবিক করে তোলে

উদাহরণ স্বরূপ:

path.join('/a', '/b', '/c');   //   \a\b\c
path.join('/a', '/b', 'c');    //   \a\b\c
path.join('/a', 'b', 'c');     //   \a\b\c
path.join('a', 'b', 'c');      //   \a\b\c

1
সর্বশেষ যোগদানের উদাহরণের path.join('a','b','c')ফলাফল হওয়া উচিত a\b\c।
— এসএমডিসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.