আপনার কোডটি কোন পরিবেশে চলছে তা নির্ধারণের চেষ্টা করার সাথে সমস্যাটি হ'ল যে কোনও বস্তুটি সংশোধন করে ঘোষিত করা যেতে পারে এবং কোন বিষয়বস্তুটি পরিবেশের স্থানীয়, এবং কোনটি প্রোগ্রামের মাধ্যমে সংশোধিত হয়েছে তা নির্ধারণের পক্ষে এটি অসম্ভবের কাছাকাছি হয়ে যায়।
তবে, আপনি কোন পরিবেশে রয়েছেন তা নিশ্চিত করার জন্য আমরা কয়েকটি কৌশল ব্যবহার করতে পারি।
আন্ডারস্কোর লাইব্রেরিতে ব্যবহৃত সাধারণভাবে গৃহীত সমাধানটি শুরু করা যাক:
typeof module !== 'undefined' && module.exports
এই কৌশলটি সার্ভারের পক্ষে আসলে পুরোপুরি সূক্ষ্ম, কারণ যখন requireফাংশনটি বলা হয় তখন এটি thisবস্তুটি একটি খালি বস্তুর সাথে পুনরায় সেট করে এবং moduleআপনার জন্য আবার নতুন সংজ্ঞা দেয়, এর অর্থ আপনাকে কোনও বাহ্যিক টেম্পারিংয়ের বিষয়ে চিন্তা করতে হবে না। যতক্ষণ না আপনার কোডটি লোড হয়require আপনি নিরাপদ হন।
যাইহোক, এটি ব্রাউজারে পৃথক হয়ে যায়, যেহেতু যে কেউ সহজেই moduleএটির জন্য এটি নির্ধারণ করতে পারে যে এটি আপনি যে অবজেক্টটির সন্ধান করছেন এটি মনে হয়। একদিকে এটি আপনার পছন্দসই আচরণ হতে পারে তবে এটি গ্রন্থাগার ব্যবহারকারীরা বৈশ্বিক পরিমণ্ডলে কী পরিবর্তনশীল ব্যবহার করতে পারে তা নির্দেশ করে। হয়তো কেউ নামের সাথে একটি ভেরিয়েবল ব্যবহার করতে চায়module যে exportsঅন্য ব্যবহারের জন্য এটি ভেতরে। এটি অসম্ভব, তবে অন্য পরিবেশটি এই পরিবর্তনশীল নামটি ব্যবহার করার কারণে আমরা অন্য কে কী পরিবর্তনশীল ব্যবহার করতে পারি তা বিচার করার জন্য কে?
তবে কৌশলটি হ'ল যদি আমরা ধরে নিই যে আপনার স্ক্রিপ্টটি বিশ্ব স্কোপে লোড হচ্ছে (এটি এটি কোনও স্ক্রিপ্ট ট্যাগের মাধ্যমে লোড করা হয়) তবে কোনও ভেরিয়েবল বাইরের বন্ধে সংরক্ষণ করা যায় না, কারণ ব্রাউজারটি এটি অনুমতি দেয় না । এখন নোডে মনে রাখবেন, thisঅবজেক্টটি একটি খালি অবজেক্ট, তবুও, moduleভেরিয়েবলটি এখনও উপলব্ধ। কারণ এটি বাইরের বন্ধে ঘোষণা করা হয়েছে। সুতরাং আমরা অতিরিক্ত চেক যুক্ত করে আন্ডারস্কোরের চেকটি ঠিক করতে পারি:
this.module !== module
moduleএটির সাহায্যে , যদি কেউ ব্রাউজারে বিশ্বব্যাপী স্কোপে ঘোষণা করে তবে এটি thisবস্তুতে স্থাপন করা হবে, যা পরীক্ষায় ব্যর্থ হতে পারে, কারণ this.module, মডিউল হিসাবে একই বস্তু হবে। নোডে, this.moduleবিদ্যমান নেই এবং moduleবাইরের বন্ধের মধ্যে উপস্থিত রয়েছে, সুতরাং পরীক্ষাগুলি সফল হবে কারণ তারা সমতুল্য নয়।
সুতরাং, চূড়ান্ত পরীক্ষাটি হ'ল:
typeof module !== 'undefined' && this.module !== module
দ্রষ্টব্য: এটি এখন moduleবৈকল্পিকটিকে বিশ্ব ব্যাপ্তিতে অবাধে ব্যবহারের অনুমতি দেয়, তবুও এটি একটি নতুন বন্ধকরণ তৈরি করে এবং এর moduleমধ্যে ঘোষণা দিয়ে, তারপরে সেই বন্ধের মধ্যে স্ক্রিপ্টটি লোড করে ব্রাউজারে এটিকে বাইপাস করা সম্ভব । এই মুহুর্তে ব্যবহারকারী পুরো নোড পরিবেশের সম্পূর্ণরূপে প্রতিলিপি করছেন এবং আশাকরি তারা জানেন যে তারা কী করছে এবং নোড স্টাইলের প্রয়োজনীয়তার জন্য চেষ্টা করছে। কোডটি যদি কোনও স্ক্রিপ্ট ট্যাগে কল করা হয় তবে এটি কোনও নতুন বহিরাগত বন্ধ থেকে সুরক্ষিত থাকবে।