লেজার লাইভ মনোরেপো প্রজেক্ট: পার্ট 2 - টুলস (মেক ইট শাইন) | খাতা

লেজার লাইভ মনোরেপো প্রজেক্ট: পার্ট 2 – টুলস (মেক ইট শাইন) | খাতা

উত্স নোড: 2985172

ব্লগ পোস্ট সিরিজের দ্বিতীয় এন্ট্রি “লেজার লাইভ মনোরেপো প্রজেক্ট”, যেখানে একজন লেজার ডেভেলপার আমাদেরকে লেজার লাইভ কোডবেস বিশাল মাইগ্রেশনের গল্প বলে একটি মনো ভান্ডারে। আপনি যদি অংশ 1 মিস করেন তবে এটি এখানে দেখুন:

একটি মনোরেপো আর্কিটেকচার একটি কার্যকর সমাধান ছিল তা প্রতিষ্ঠিত করার পরে, আমরা আমাদের পরিকল্পনাটি স্থাপন করার জন্য উপলব্ধ সরঞ্জামগুলি দেখতে শুরু করি।

একাধিক প্রকল্প পরিচালনা করা

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

  • NPM (ওয়ার্কস্পেসের জন্য সমর্থন আছে তবে আরও ভাল বিকল্প),
  • সুতা ঘ (খুব পুরানো হয়ে যাওয়া, আরও ভাল এবং আরও দক্ষ বিকল্প),
  • সুতা ≥ 2 (আকর্ষণীয় ধারণা, কিন্তু প্লাগ এন প্লে সর্বত্র সমর্থিত নয়, বিশেষ করে প্রতিক্রিয়া নেটিভের সাথে)
  • পিএনপিএম (সিমলিঙ্ক, ওয়ার্কস্পেসকে মাথায় রেখে তৈরি, ডিস্ক দক্ষ)।

এই সব দেখার পরে, আমরা সঙ্গে যেতে সিদ্ধান্ত নিয়েছে পিএনপিএম জন্য:

  • ডিস্ক দক্ষতা (এটি একটি ভার্চুয়াল ব্যবহার করে দোকান এবং symlinks, তাই প্যাকেজগুলি শুধুমাত্র একবার ডাউনলোড করা হয় তারপর ভার্চুয়াল স্টোর থেকে আপনার node_modules এর সাথে সিমলিংক করা হয়),
  • গতি (যেহেতু প্যাকেজগুলি ক্যাশে করা হয়, পরবর্তী ইনস্টলেশনগুলি অনেক দ্রুত হয়),
  • ওয়ার্কস্পেস/মনোরেপো আর্কিটেকচারের সমর্থনে নির্মিত (উনাম, অর্কেস্ট্রেশন ইত্যাদি...)।

কাগজে পিএনপিএম একটি পরম রত্ন, কিন্তু সিমলিংকগুলি সঠিকভাবে সেটআপ করার জন্য কিছুটা অদ্ভুত ছিল (আবার, বিশেষভাবে প্রতিক্রিয়া নেটিভের সাথে)।

ঠিক আছে, তাই আমাদের পছন্দ করা হয়েছে, আমরা সঙ্গে যেতে হবে পিএনপিএম।

স্ক্রিপ্ট অর্কেস্ট্রেশন

যদিও পিএনপিএম এর বৈশিষ্ট্যগুলিতে আরও বেশি অর্কেস্ট্রেশন যোগ করে, এটি এখনও আমরা যা করতে চেয়েছিলাম তা কভার করে না, যেমন:

  • অনুক্রমিক নির্মাণ,
  • ক্যাশিং

এইগুলির জন্য, আমরা দুটি আকর্ষণীয় প্রতিযোগী পেয়েছি যেগুলি আমাদের একবার দেখতে হবে:

  • NX (কৌণিক দল দ্বারা),
  • টার্বোরেপো (যেটি মাত্র v1.0.0 ঘোষণা করেছিল যখন আমরা এটিতে কাজ শুরু করি এবং এখন Vercel দলের সাথে কাজ করছি)।

আমরা উভয়ের ধারণার একটি প্রমাণ করেছি।

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

টার্বোরেপো অন্যদিকে, এটি বেশ মৌলিক বৈশিষ্ট্য অনুসারে। তবুও এটি একটি সুবিধাজনক প্লাগ এবং প্লে সমাধান যা প্রয়োজন হলে আমরা খুব দ্রুত পরিবর্তন করতে পারি।

যদিও টার্বোরেপো তুলনায় কম বৈশিষ্ট্য ছিল NX, এটি 2টি জিনিস করেছে যা আমরা খুঁজছিলাম:

  • নির্ভরশীলতা গাছকে সম্মান করে নির্মাণের অর্কেস্ট্রেশন (এবং সমসাময়িক নির্মাণ),
  • ক্যাশিং (বিল্ডগুলি ক্যাশে করা হয় এবং তাদের কোড পরিবর্তন না হলে 'রিপ্লে' হয়)।

এটি, সহজে ড্রপ ইন/ড্রপ আউট, আমাদের ব্লকে নতুন বাচ্চা বেছে নিতে বাধ্য করেছে, টার্বোরেপো.

ভারশনিং

আমরা বেশ কয়েকটি সমাধানও দেখেছি, কিন্তু শেষ পর্যন্ত ব্যবহার করার সিদ্ধান্ত নিয়েছি https://github.com/changesets/changesets যেহেতু এটি একটি টুল ছিল TurboRepo সুপারিশ করেছে, এবং কিছু ডকুমেন্টেশন পড়ার পরে, আমাদের প্রয়োজনগুলি মেনে চলছে বলে মনে হচ্ছে।

ডেভেলপারদের তাদের ডেভ ফ্লো এবং প্রদানে একটু বেশি কঠোর হতে হবে changesets (ফাইল বর্ণনা করে কোন লাইব্রেরিতে তাদের কোড পরিবর্তন হয়, এর তীব্রতা অনুসরণ করে সেমভার কনভেনশন, এবং পরিবর্তনের বর্ণনা)। এইগুলো changesets তারপর স্বয়ংক্রিয়ভাবে প্রদত্ত তীব্রতার সাথে সম্পর্কিত প্যাকেজগুলির সংস্করণকে বাম্প করতে ব্যবহৃত হয়, সেইসাথে এর প্রজন্ম স্বয়ংক্রিয়ভাবে চেঞ্জলগ. এর উপরে, সরঞ্জামগুলি অনুমতি দেয় pre release মোড, 🍒 এ 🍰।

এরপর কি ?

সরঞ্জামগুলির বিষয়ে সিদ্ধান্ত নেওয়ার পরে, এটি কাজ শুরু করার সময় ছিল। পরবর্তী ব্লগ নিবন্ধে, আমরা একটি মনো সংগ্রহস্থলের প্রসঙ্গে বিল্ড সিস্টেম এবং সমস্ত ডেভ-অপস / অটোমেশন / ক্রমাগত ইন্টিগ্রেশন সম্পর্কে কথা বলব।


ভ্যালেন্টিন ডি আলমেইডা
বিকাশকারীর অভিজ্ঞতা এবং মূল প্রযুক্তি - লেজার লাইভ

সময় স্ট্যাম্প:

থেকে আরো খতিয়ান