Yarn, Npm থেকে PNPM: আমার ডেভেলপমেন্ট লাইফের গেম চেঞ্জার!
Rasel Mahmud

Rasel Mahmud @raselmahmuddev

About: A full stack web developer.

Joined:
Aug 22, 2022

Yarn, Npm থেকে PNPM: আমার ডেভেলপমেন্ট লাইফের গেম চেঞ্জার!

Publish Date: May 14
1 0

🚀 Yarn থেকে PNPM: ডেভেলপমেন্ট লাইফের গেম চেঞ্জার!

হ্যালো ডেভ 👋,

আজ আপনাদের সাথে শেয়ার করতে চাই আমার React Native & Next.js প্রজেক্টে npm থেকে pnpm-এ মাইগ্রেশনের অভিজ্ঞতা। সম্প্রতি প্রজেক্টের node_modules এর সাইজ একটু বেড়ে গিয়ে ছিল - প্রায় ৬ গিগাবাইট!

একটি মিডিয়াম সাইজের অ্যাপের জন্য এত স্পেস?

কোনো একসময় পড়েছিলাম pnpm ক্যাশিং এবং সিমলিংক ব্যবহার করে, কিন্তু পুরোপুরি pnpm-এ মাইগ্রেট করতে সময় হয়ে উঠছিল না। তবে পরে pnpm-এর হার্ড লিংকিং এবং সিমলিংক (Symbolic Link) ব্যবস্থাপনা নিয়ে বিস্তারিত রিসার্চ করলাম। এটি গ্লোবালি প্যাকেজ স্টোর করে এবং প্রজেক্টে সিমলিংকের মাধ্যমে ব্যবহার করে, যা স্পেস এবং ইনস্টলেশনের সময় উভয়ই কমিয়ে আনে।

🔥 মাইগ্রেশন:

  1. প্রথমে সব node_modules ডিলেট (rm -rf node_modules)
  2. PNPM ইনস্টল (npm install -g pnpm)
  3. নতুন করে ডিপেন্ডেন্সি ইনস্টল (pnpm install)

🚀 PNPM এর মূল ধারণা:

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

✅ সুবিধা:

  • দ্রুত ইনস্টলেশন
  • স্মার্ট ক্যাশিং সিস্টেম
  • কম স্টোরেজ ব্যবহার
  • সহজ সংস্করণ নিয়ন্ত্রণ
  • গ্লোবাল স্টোর: সব প্রজেক্টে একই প্যাকেজের শুধু একটি কপি রাখে
  • হার্ড লিংক: প্রতিটি প্রজেক্টে আলাদা কপি না করে লিংক তৈরি করে
  • সিমলিংক: node_modules ফোল্ডারে একটি ভার্চুয়াল স্ট্রাকচার তৈরি করে, প্রতিটি প্যাকেজ  .pnpm ফোল্ডারে অবস্থিত হার্ড-লিংকড ফাইলকে পয়েন্ট করে
  • সিকিউরিটি: ফ্যান্টম ডিপেন্ডেন্সি প্রবলেম ফিক্স করে

👻 ফ্যান্টম ডিপেন্ডেন্সি (Phantom Dependency)

Phantom Dependency মানে এমন একটি প্যাকেজ যা আপনার প্রজেক্টের package.json-এ নেই, কিন্তু অন্য কোনো প্যাকেজের ডিপেন্ডেন্সি হিসেবে node_modules-এ চলে এসেছে।

ফলে আপনি সেটা সরাসরি import বা use করতে পারেন, যদিও আপনি নিজে তা ইনস্টল করেননি।

🧨 সমস্যা কী?

যদি ভবিষ্যতে সেই ডিপেন্ডেন্সি প্যাকেজটি সরিয়ে দেওয়া হয় বা আপডেট করা হয়, যেটা ওই ফ্যান্টম প্যাকেজের ওপর নির্ভর করছিল, তাহলে আপনার অ্যাপ ব্রেক করে যেতে পারে। কারণ আপনি তো সরাসরি ইনস্টল করেননি, কিন্তু কোডে ব্যবহার করেছেন।

pnpm এই প্রবলেম ফিক্স করে — আপনি শুধু যা ইনস্টল করেছেন, সেটাই ব্যবহার করতে পারবেন।

image.png

এখানে শুধু ইনস্টল করা প্যাকেজ ই আছে এবং সব গুলো প্যাকেজ সিমলিংক করা আছে .pnpm ডিরেক্টরি তে।

🚀 কিভাবে শুরু করবেন?

npm install -g pnpm
pnpm install
Enter fullscreen mode Exit fullscreen mode

🗂️ Stored Package Directory:

pnpm store path
# Example: /home/rasel/.local/share/pnpm/store/v10
Enter fullscreen mode Exit fullscreen mode

🔧 PNPM কমান্ড সমূহ:

pnpm init                 # নতুন প্রজেক্ট শুরু
pnpm add react            # রিয়্যাক্ট ইনস্টল
pnpm add -D typescript    # টাইপস্ক্রিপ্ট devDependency হিসেবে
pnpm run dev              # স্ক্রিপ্ট চালানো
Enter fullscreen mode Exit fullscreen mode

আরও কমান্ড 👇

pnpm install --frozen-lockfile   # lockfile না বদলে আগের মতোই ইনস্টল করে

pnpm add lodash                  # প্রডাকশন ডিপেন্ডেন্সি হিসেবে lodash যোগ
pnpm add -D eslint               # ডেভেলপমেন্ট ডিপেন্ডেন্সি হিসেবে eslint যোগ

pnpm remove lodash               # lodash রিমুভ করে

pnpm update                      # সব প্যাকেজ আপডেট করে
pnpm update react                # শুধু react আপডেট করে

pnpm list                        # সব ইন্সটলড প্যাকেজ দেখায়
pnpm list -r                     # recursive ভাবে দেখায়

pnpm why <pkg>                   # কোন প্যাকেজ কার মাধ্যমে এসেছে, তা ট্রেস করে

pnpm outdated                    # পুরানো প্যাকেজ লিস্ট করে

pnpm run build                   # build স্ক্রিপ্ট চালায়
pnpm run lint                    # lint স্ক্রিপ্ট চালায়

pnpm exec eslint src/           # সরাসরি eslint চালায়

pnpm env use --global 18        # নির্দিষ্ট Node.js ভার্সন global এ সেট করে

pnpm store prune                # অপ্রয়োজনীয় ক্যাশ ক্লিন করে

pnpm dlx create-next-app        # একবারের জন্য কমান্ড চালিয়ে প্যাকেজ রান করে
Enter fullscreen mode Exit fullscreen mode

কেউ কি PNPM ইউজ করছেন? নাকি এখনও Yarn/npm এ আটকে আছেন?

WebDev #NodeJS #PNPM #NextJS #BanglaDev #ProgrammingTips

Comments 0 total

    Add comment