একটি শেয়ার্ড npm ওয়ার্কস্পেস প্যাকেজ প্রকৃতপক্ষে কী সরবরাহ করবে তা যাচাই করতে, মনোরেপো থেকে এর টেস্টগুলো চালান, ওয়ার্কস্পেসটি প্যাক করুন, তারপর সেই টারবলটি আপনার Mac-এর একটি পৃথক অস্থায়ী কনজিউমার ডিরেক্টরিতে ইনস্টল করুন। এটি npm-এর লোকাল ওয়ার্কস্পেস সিমলিঙ্কের কারণে আড়ালে থাকা সমস্যাগুলো চিহ্নিত করে, যেমন অনুপস্থিত বিল্ট ফাইল বা ভুল প্যাকেজ এন্ট্রি পয়েন্ট। এটি কোনো রেজিস্ট্রিতে কিছুই প্রকাশ করে না।
১. ওয়ার্কস্পেস রুট থেকে প্যাকেজটির নিজস্ব টেস্টগুলো চালান
টার্মিনাল খুলুন এবং মনোরেপো রুটে প্রবেশ করুন—যে ডিরেক্টরিতে রুট package.json রয়েছে। নিশ্চিত করুন যে প্যাকেজটি রুটের workspaces কনফিগারেশনে উপস্থিত রয়েছে এবং এর নিজস্ব package.json আছে। npm কনফিগার করা ওয়ার্কস্পেসগুলোকে রুট node_modules-এ লিঙ্ক হিসেবে ইনস্টল করে, তাই সেখানে একটি টেস্ট রান লাইভ ওয়ার্কস্পেস সোর্স রিজলভ করতে পারে। ওয়ার্কস্পেস অপশনটি আপনাকে প্যাকেজের ঘোষিত নাম বা ডিরেক্টরি দিয়ে সেটিকে টার্গেট করতে দেয়। npm Workspaces
প্যাকেজের package.json থেকে নামটি প্রতিস্থাপন করে, এর ওয়ার্কস্পেস নাম ব্যবহার করে প্যাকেজটির টেস্ট স্ক্রিপ্ট চালান:
npm run test --workspace=@acme/math
প্যাকেজটি যদি কোনো ভিন্ন স্ক্রিপ্ট নাম ব্যবহার করে, তবে সেই নামটি ব্যবহার করুন। যদি এতে কোনো টেস্ট স্ক্রিপ্ট না থাকে, তবে এই কমান্ডটি এর আচরণ পরীক্ষা করতে পারবে না; প্রজেক্টটিতে প্রকৃতপক্ষে সংজ্ঞায়িত চেকগুলো চালান, যেমন এর বিল্ড বা লিন্ট স্ক্রিপ্ট। কেবল রুট-লেভেলের টেস্ট কমান্ডের ওপর নির্ভর করা এড়িয়ে চলুন: আপনি কোনো ওয়ার্কস্পেস নির্বাচন না করা পর্যন্ত test-এর মতো npm কমান্ডগুলো রুটের ওপর কাজ করে। npm Workspaces
২. প্যাকেজ টারবল পর্যালোচনা এবং তৈরি করুন
একটি লোকাল ওয়ার্কস্পেস টেস্ট এটি প্রমাণ করে না যে কনজিউমারদের প্রয়োজনীয় ফাইলগুলো প্যাকেজে অন্তর্ভুক্ত রয়েছে। প্রথমে মনোরেপো রুট থেকে নির্বাচিত ওয়ার্কস্পেসের প্যাকেজের বিষয়বস্তুর প্রিভিউ দেখুন:
npm pack --workspace=@acme/math --dry-run
প্যাকেজ এন্ট্রি পয়েন্ট, বিল্ট আউটপুট, টাইপ ডিক্লারেশন এবং প্যাকেজের প্রতিশ্রুতি দেওয়া অন্য যেকোনো ফাইলের জন্য ফাইলের তালিকাটি পর্যালোচনা করুন। npm-এর files, .npmignore, এবং .gitignore সেটিংস এর বিষয়বস্তুকে প্রভাবিত করে; ডিফল্টভাবে npm যেসব ফাইল অন্তর্ভুক্ত করে তার মধ্যে package.json এবং README ও লাইসেন্স ফাইলগুলো রয়েছে। main বা exports এমন ফাইলগুলোকে নির্দেশ করছে কি না যা আর্কাইভে থাকবে তা যাচাই করুন। npm pack, package.json files and entry points
তালিকাটি ঠিক মনে হলে, একটি অস্থায়ী ডিরেক্টরিতে একটি বাস্তব টারবল তৈরি করুন। নিচের কমান্ডগুলো macOS-এর ডিফল্ট zsh-সামঞ্জস্যপূর্ণ উদ্ধৃতি ব্যবহার করে এবং আর্টিফ্যাক্টটিকে আপনার রিপোজিটরির বাইরে রাখে:
scratch="$(mktemp -d "${TMPDIR:-/tmp}/workspace-package-check.XXXXXX")"
npm pack --workspace=@acme/math --pack-destination="$scratch"
--dry-run কেবল npm কী প্যাক করবে তা রিপোর্ট করে; এটি আর্কাইভ তৈরি করে না। দ্বিতীয় কমান্ডটি একটি আর্কাইভ তৈরি করে, কিন্তু এটি আপলোড করে না। npm-এর ডকুমেন্টেশনে npm pack-কে একটি টারবল তৈরির প্রক্রিয়া হিসেবে বর্ণনা করা হয়েছে এবং এটি ওয়ার্কস্পেস সিলেক্টরকে সমর্থন করে। npm pack
৩. একটি পরিষ্কার কনজিউমার ফোল্ডারে আর্কাইভটি ইনস্টল করুন
টারবল পাথটি খুঁজুন, একটি পৃথক কনজিউমার ডিরেক্টরি তৈরি করুন এবং সেখানে আর্কাইভটি ইনস্টল করুন। এই উদাহরণটিতে ধরে নেওয়া হয়েছে যে অস্থায়ী ডিরেক্টরিতে কেবল একটি টারবল প্যাক করা হয়েছিল:
tarball="$(find "$scratch" -maxdepth 1 -name '*.tgz' -print -quit)"
consumer="$scratch/consumer"
mkdir -p "$consumer"
cd "$consumer"
npm init -y
npm install "$tarball"
একটি .tgz ইনস্টল করলে প্যাক করা আর্টিফ্যাক্টটি পরীক্ষা করা যায়। একটি ওয়ার্কস্পেস ফোল্ডার ইনস্টল করা বা মনোরেপোর লিঙ্কযুক্ত ডিপেন্ডেন্সি ব্যবহার করার আচরণ ভিন্ন হতে পারে। npm install
এখন এর পাবলিক এন্ট্রি পয়েন্টের মাধ্যমে প্যাকেজটি ব্যবহার করে দেখুন। প্যাকেজটির আসল নাম এবং এর API-এর জন্য উপযুক্ত একটি ছোট কনজিউমার চেক ব্যবহার করুন—উদাহরণস্বরূপ, এটিকে require বা import করুন, তারপর একটি প্রতিনিধি এক্সপোর্টেড ফাংশন কল করুন। কনজিউমার ডিরেক্টরি থেকে সেই চেকটি চালান, যেখানে প্যাকেজটি সদ্য ইনস্টল করা node_modules থেকে রিজলভ হয়। প্রজেক্টটি যদি কম্পাইল করা আউটপুট প্রকাশ করে, তবে প্যাক করার আগে বিল্ডটি চালানো হয়েছে কিনা তা যাচাই করুন; অন্যথায় ডেভেলপমেন্টের সময় টেস্টগুলো সফল হলেও আর্কাইভে ফাইল অনুপস্থিত থাকতে পারে।
৪. প্রকাশ করার আগে ত্রুটিগুলো নির্ণয় করুন
ইনস্টলেশন ব্যর্থ হলে, আর্কাইভে name এবং version সহ একটি package.json আছে কিনা তা যাচাই করুন, তারপর এর ফাইল তালিকা পরীক্ষা করুন এবং টারবলে কনফিগার করা এন্ট্রি পয়েন্টগুলো বিদ্যমান কিনা তা নিশ্চিত করুন। ইমপোর্ট ব্যর্থ হলে, প্যাকেজের type, main, এবং exports সেটিংসের সাথে কনজিউমারের মডিউল ফরম্যাটের তুলনা করুন। একটি প্যাকেজ ওয়ার্কস্পেস টেস্টে পাস করলেও এখানে ব্যর্থ হতে পারে কারণ সেই টেস্টগুলো সরাসরি সোর্স ফাইল লোড করতে পারে অথবা মনোরেপো থেকে অঘোষিত ডিপেন্ডেন্সি রিজলভ করতে পারে।
যদি কোনো ডিপেন্ডেন্সি অন্য একটি অপ্রকাশিত ওয়ার্কস্পেস হয়, তবে উদ্দিষ্ট রিলিজের ব্যবস্থাও পরীক্ষা করুন। একটি টারবল ইনস্টল করা কোনো কনজিউমার মনোরেপো লিঙ্কের মাধ্যমে স্বয়ংক্রিয়ভাবে সিবলিং ওয়ার্কস্পেসের সোর্স পাবে না। নিশ্চিত করুন যে সিবলিং প্যাকেজগুলো সামঞ্জস্যপূর্ণ সংস্করণে প্রকাশিত/উপলব্ধ রয়েছে, অথবা একটি সুচিন্তিত বান্ডিলযুক্ত বা ইনস্টলেশনযোগ্য সেটআপ ব্যবহার করুন। এই পদ্ধতিটি বর্তমান Mac/Node পরিবেশে একটি লোকাল প্যাক করা প্যাকেজ যাচাই করে; এটি প্রতিটি Node সংস্করণ, অপারেটিং সিস্টেম বা রেজিস্ট্রি কনফিগারেশন জুড়ে আচরণ নিশ্চিত করতে পারে না।
কার্যকর সমাপ্তি বিন্দু হলো একটি সফল ওয়ার্কস্পেস টেস্ট, একটি গ্রহণযোগ্য প্যাকেজ ফাইল তালিকা, এবং একটি কনজিউমার চেক যা মনোরেপোর বাইরে থেকে টারবলটি ইনস্টল ও প্রয়োগ করে। আপনার যদি অস্থায়ী ডিরেক্টরিটি পরীক্ষা করার প্রয়োজন হয় তবে এটি রেখে দিন, অথবা ভ্যারিয়েবলটি এখনও জেনারেট করা অস্থায়ী পাথটি নির্দেশ করছে কিনা তা নিশ্চিত করার পরে rm -rf "$scratch" দিয়ে এটি সরিয়ে ফেলুন।
সূত্রসমূহ
Workspaces — npm
npm pack — npm
npm install — npm