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

দুটি নাম, দুটি গন্তব্য

npm প্যাকেজের নামের হয় একটি স্কোপ থাকে, নয় থাকে না। স্কোপযুক্ত নাম একটি অ্যাট-চিহ্ন এবং একটি স্কোপ শনাক্তকারী দিয়ে শুরু হয়, আর সেই শনাক্তকারীই হলো যা কনফিগারেশন ম্যাপ করতে পারে। প্যাকেজের অন্য কিছুই ম্যাপিংয়ের জন্য গুরুত্বপূর্ণ নয়। রেজিস্ট্রি কখনও প্যাকেজটি অভ্যন্তরীণ না পাবলিক তার ভিত্তিতে অনুরোধ দেখে না; এটি কেবল একটি নাম দেখে।

তাই নিচের ফাইলটি তিনটি লাইনে দুটি উদ্দেশ্য প্রকাশ করে: পাবলিক প্যাকেজগুলি পাবলিক রেজিস্ট্রিতে যায়, আর কোম্পানি স্কোপের অধীনে থাকা প্যাকেজগুলি সেই হোস্টের টোকেনসহ কোম্পানির রেজিস্ট্রিতে যায়।

registry=https://registry.npmjs.org/
@acme:registry=https://packages.corp.example/
//packages.corp.example/:_authToken=${NPM_TOKEN}

স্কোপ, হোস্ট এবং ভেরিয়েবলের নাম প্রতিষ্ঠানটি প্রকৃতপক্ষে যা দেয় তা দিয়ে প্রতিস্থাপন করুন। কাঠামোই গুরুত্বপূর্ণ, উদাহরণের মান নয়। দুটি কনফিগারেশন লাইন পুরো নীতি বহন করে, তাই সেগুলি অনুলিপি করার বদলে বোঝা উচিত।

ম্যাপিং এবং নেটওয়ার্ককে মনে আলাদা কুঠুরিতে রাখুন। একটি স্কোপ এন্ট্রি অপ্রাপ্য হোস্টকে প্রাপ্য করতে পারে না, আর একটি কাজ করা টানেল npm-কে বলতে পারে না কোন প্যাকেজ কোন রেজিস্ট্রির।

ফাইলটি সঠিক ক্রমে লিখুন

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

প্রতিষ্ঠান অন্যথায় সিদ্ধান্ত না নিলে ডিফল্ট registry লাইনটি পাবলিক রেজিস্ট্রির দিকে নির্দেশ করে রাখুন। এটি সরিয়ে দিলে মেশিনটি ব্যবহারকারী-স্তরের ফাইল যা বলে তার উপর নির্ভরশীল হয়ে পড়ে, আর এটিই ঠিক সেই অন্তর্নিহিত নির্ভরতা যা দুটি ল্যাপটপে ভিন্ন ফল দেয়।

স্কোপ লাইনটি কোনো ওয়াইল্ডকার্ড নয়। স্কোপের বাইরের নাম ডিফল্ট ব্যবহার চালিয়ে যায়, আর আপনার নিজে না লেখা প্রতিটি নির্ভরতার জন্য এটিই কাঙ্ক্ষিত আচরণ।

ফাইলটি কমিট করার আগে যাচাই করুন এটি কীসে রিজলভ হয়, প্রকৃত ইনস্টলের বদলে একটি অস্থায়ী প্যাকেজ নাম ব্যবহার করে, যাতে ভুলে কিছু খরচ না হয়।

ক্রেডেনশিয়াল প্রকল্পের নয়, হোস্টের

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

পরিবেশ ভেরিয়েবল ব্যবহার করলে আক্ষরিক টোকেনটি রিপোজিটরির ফাইলের বাইরে থাকে। এটি টোকেনকে সর্বত্র অদৃশ্য করে না; এটি এখনও প্রক্রিয়া পরিবেশে দেখা যায়, এবং কনফিগারেশন প্রিন্ট করা একটি কমান্ড তা প্রকাশ করতে পারে।

প্রতিষ্ঠান যে স্থানীয় বা CI ক্রেডেনশিয়াল ব্যবস্থা অনুমোদন করে তার মাধ্যমে ভেরিয়েবলটি সরবরাহ করুন, এবং এমন উদাহরণে কখনও প্রকৃত টোকেন পেস্ট করবেন না যা ডকুমেন্টেশনে অনুলিপি হতে পারে।

যদি দুটি রেজিস্ট্রি জড়িত থাকে, প্রত্যেকটি নিজস্ব এন্ট্রি পায়। একটি একক অযোগ্য টোকেন সেটিং সর্বোত্তম ক্ষেত্রে অস্পষ্ট এবং সর্বনিম্ন ক্ষেত্রে ভুল হোস্টে পাঠানো হয়।

যখন ভুল রেজিস্ট্রি জেতে

কনফিগারেশন স্তরযুক্ত, এবং কার্যকর মানটি আপনি এইমাত্র সম্পাদনা করা ফাইলের মান নাও হতে পারে। প্রকল্প সেটিংস, ব্যবহারকারী সেটিংস, গ্লোবাল সেটিংস এবং পরিবেশ ভেরিয়েবল সবই অংশ নেয়। এই স্তরায়ণই কারণ একটি সমাধান আপনার মেশিনে কাজ করে কিন্তু সহকর্মীর কন্টেইনারে কাজ করে না। এটিই কারণ কার্যকর মানটি নিয়ে তর্ক করার আগে তা প্রিন্ট করা উচিত।

পরিবেশ ভেরিয়েবলই CI-তে সাধারণত দোষী, যেখানে একটি জব একবার রেজিস্ট্রি সেট করে এবং পরবর্তী প্রতিটি ধাপ তা উত্তরাধিকারসূত্রে পায়। দ্বিতীয় সর্বাধিক সাধারণ হলো ডেভেলপারের মেশিনে ব্যবহারকারী-স্তরের ফাইল যা রিপোজিটরি যা বলে তা ওভাররাইড করে।

অন্য কিছু ডিবাগ করার আগে একটি স্কোপযুক্ত এবং একটি স্কোপহীন নামের জন্য কার্যকর কনফিগারেশন ও রিজলভ হওয়া রেজিস্ট্রি প্রিন্ট করুন। এই দুটি উত্তর যদি আপনার প্রত্যাশিত হয়, সমস্যা নেটওয়ার্কে; না হলে সমস্যা কনফিগারেশনে এবং কোনো VPN কাজই সাহায্য করবে না।

কমিট করার আগে চেকলিস্ট

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

নিশ্চিত করুন প্রাইভেট রেজিস্ট্রিটি ইনস্টল চালানো প্রসঙ্গে মেশিন থেকে পৌঁছানো যায়, শুধু আপনার ব্রাউজার থেকে নয়। এই পার্থক্যটি গুরুত্বপূর্ণ যখন প্রক্সি বা কন্টেইনারের রাউটিং আপনার শেল থেকে আলাদা।

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

সম্পর্কিত নিবন্ধ