প্রকল্প সম্পর্কে
ncc হল Vercel-এর রক্ষণাবেক্ষণ করা একটি কমান্ড-লাইন টুল যা একটি Node.js প্রোগ্রাম এবং এর সমস্ত ডিপেন্ডেন্সিকে একটি একক আউটপুট ফাইলে বান্ডল করে, gcc-স্টাইল কম্পাইলেশনের ধারণায়। এর ডিজাইন লক্ষ্য হল জিরো কনফিগারেশন: একটি এন্ট্রি ফাইল নির্দেশ করুন এবং এটি একটি কমপ্যাক্ট বিল্ড তৈরি করে, যেখানে tsconfig.json থাকলে TypeScript নেটিভভাবে পরিচালিত হয়।
প্রাথমিক কমান্ডগুলি হল `build` (একটি বান্ডলড ফাইল আউটপুট ডিরেক্টরিতে নির্গত করে, ডিফল্ট `dist/index.js`), `run` (একটি অস্থায়ী ডিরেক্টরিতে বিল্ড করে এবং পরীক্ষা ও ডিবাগিংয়ের জন্য সম্পূর্ণ সোর্স-ম্যাপ সাপোর্ট সহ এক্সিকিউট করে), এবং `cache` (বিল্ড ক্যাশ পরিষ্কার, পরিদর্শন বা সাইজ নির্ধারণ)। অপশনগুলি সাধারণ বান্ডলিং চাহিদা কভার করে: `--minify`, `--source-map`, নির্দিষ্ট মডিউল বান্ডল না করার জন্য `--external`, ইনক্রিমেন্টাল রিবিল্ডের জন্য `--watch`, ECMAScript আউটপুট স্তর নির্ধারণের জন্য `--target`, V8 কম্পাইল ক্যাশ নির্গত করার জন্য `--v8-cache`, লাইসেন্সিং তথ্য সংযুক্ত করার জন্য `--license`, webpack পরিসংখ্যান JSON আকারে ডাম্প করার জন্য `--stats-out`, এবং ওয়ার্কার স্ক্রিপ্টের মতো নেস্টেড JS অ্যাসেট পুনরাবৃত্তভাবে বান্ডল করার জন্য `--asset-builds`। মডিউল ফরম্যাট ইনপুট থেকে অনুমান করা হয়, তাই `.mjs` ইনপুট বা `"type": "module"` প্যাকেজ সীমানার ভিতরের ফাইলগুলি ES মডিউল আউটপুট তৈরি করে, যখন `.cjs` ইনপুট CommonJS এক্সটেনশন সংরক্ষণ করে।
CLI ছাড়াও, ncc Node.js থেকে একটি প্রোগ্রাম্যাটিক API প্রকাশ করে। একটি ইনপুট পাথ এবং একটি অপশন অবজেক্ট সহ `require('@vercel/ncc')` কল করলে একটি প্রমিস ফেরত আসে যা `{ code, map, assets }`-এ রেজলভ হয়, যেখানে assets হল ফাইল নামের একটি ম্যাপ যা তাদের সোর্স, অনুমতি এবং সিমলিংক মেটাডেটা সহ। অপশনগুলি CLI ফ্ল্যাগগুলিকে প্রতিফলিত করে, যার মধ্যে কাস্টম ক্যাশ পাথ, এক্সটার্নাল, মিনিফিকেশন, সোর্স ম্যাপ, ওয়াচ মোড, লাইসেন্স জেনারেশন এবং টার্গেট নির্বাচন অন্তর্ভুক্ত। ওয়াচ মোডে, ফেরত দেওয়া অবজেক্টটি প্রমিসের পরিবর্তে `handler`, `rebuild` এবং `close` কলব্যাক প্রকাশ করে।
প্রকল্পের বিবৃত উদ্দেশ্যগুলি হল ন্যূনতম npm প্যাকেজ প্রকাশ করা, সার্ভারলেস পরিবেশে শুধুমাত্র প্রাসঙ্গিক কোড পাঠানো, বান্ডলার কনফিগারেশন ওভারহেড এড়ানো এবং বুট সময় ও I/O উন্নত করা। এটি ইনপুট এবং আউটপুট উভয় হিসাবে Node.js প্রোগ্রামগুলিকে লক্ষ্য করে এবং সমস্ত Node.js প্যাটার্ন এবং npm মডিউল সমর্থন করার লক্ষ্য রাখে। একটি নথিভুক্ত সীমাবদ্ধতা হল যে ফাইল এবং অ্যাসেট স্থানান্তর একটি স্ট্যাটিক ইভালুয়েটরের উপর নির্ভর করে, তাই ডাইনামিকভাবে লোড হওয়া অ্যাসেটগুলি যা স্ট্যাটিকভাবে বিশ্লেষণ করা যায় না সেগুলি সঠিকভাবে স্থানান্তরিত নাও হতে পারে। কিছু প্যাকেজের সম্পূর্ণ সামঞ্জস্যের জন্য অতিরিক্ত অপশন প্রয়োজন, যা রিপোজিটরির প্যাকেজ-সাপোর্ট ডকুমেন্টেশনে তালিকাভুক্ত।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.