ডকুমেন্টেশনউন্নত
Nexy কিভাবে কাজ করে
আপনার লেখা একটি ফাইল এবং ব্রাউজারে পৃষ্ঠার মধ্যে কী ঘটে: একটি অনুরোধ যে স্তরগুলি অতিক্রম করে, কে কী তৈরি করে এবং Nexy আপনার অ্যাপ্লিকেশনে কী রেখে যায়৷ শুরু করার জন্য আপনার এই পৃষ্ঠার প্রয়োজন নেই; এটি পরে "কেন এটি এমন কাজ করে" প্রশ্নের উত্তর দেয়।
স্তরগুলো
Browser
│
▼
Uvicorn ───── ASGI transport
│
▼
Middleware ── sessions, CORS, gzip, trusted hosts, your own
│
▼
Router ────── FBR | Modular | Custom ── picks the file that answers
│
▼
Renderer ──── HTML (Jinja2, Markdown, Node) or JSON
│
▼
Response| স্তর | দায়িত্ব | করে না |
|---|---|---|
| Uvicorn | সংযোগ গ্রহণ করুন, ASGI কথা বলুন | একটি পৃষ্ঠা কি জানেন |
| মিডলওয়্যার | অনুরোধটি সাজান: সেশন, CORS, gzip, বিশ্বস্ত হোস্ট, HTTPS পুনঃনির্দেশ, আপনার | একটি রুট চয়ন করুন |
| রাউটার | একটি ফাইলের সাথে URL-এর সাথে এর বিন্যাস, নির্ভরতা এবং ত্রুটি পৃষ্ঠাগুলি মেলে | বিষয়বস্তু উত্পাদন |
| রেন্ডারার | পৃষ্ঠাটি চালান এবং এর ফলাফলকে HTML বা JSON এ পরিণত করুন | আপনার ডেটা আনুন |
| ক্লায়েন্ট | Vite এবং আপনার কাঠামো: বান্ডেল, হাইড্রেশন, ক্লায়েন্ট নেভিগেশন | একটি সার্ভার অনুরোধ উত্তর |
কে কি নির্মাণ করে
| অভিনেতা | মালিক | মালিকানা নেই |
|---|---|---|
| নেক্সি | রাউটিং, সার্ভার রেন্ডারিং, অ্যাকশন, .nexy সংকলন, একটি মূল |
উপাদান, প্রতিক্রিয়া, তথ্য |
| Vite | ক্লায়েন্ট বান্ডেল, ডেভ সার্ভার, হট রিলোড | রাউটিং, সার্ভার রেন্ডারিং, অ্যাকশন |
| আপনার কাঠামো | উপাদান, প্রতিক্রিয়াশীলতা, বাস্তুতন্ত্র | রাউটিং, নথি (Nexy এটির জন্য তার লেআউট জিজ্ঞাসা করে) |
| আপনার আবেদন | ডেটা, প্রমাণীকরণ, অনুমোদন, ব্যবসার নিয়ম | পরিবহন, রেন্ডারিং |
টেবিলের পিছনের নিয়ম: Nexy যা তার মালিকানা তৈরি করে এবং যা Vite কম্পাইল করে তা কখনই কম্পাইল করে না।
রাউটিং সিস্টেম
src/routes/ এর অধীনে একটি পাথ চারটি নিয়ম দ্বারা একটি URL হয়ে যায়:
| ফাইল | URL |
|---|---|
blog/index.nexy |
/blog |
blog/[slug].nexy |
/blog/hello |
blog/[...parts].nexy |
/blog/a/b |
(marketing)/about.nexy |
/about |
এক্সটেনশন কখনই দেখা যায় না; index হল এর ফোল্ডারের রুট; বন্ধনীতে থাকা একটি ফোল্ডার একটি সেগমেন্ট যোগ না করে ফাইলগুলিকে গোষ্ঠীভুক্ত করে।
যখন দুটি জিনিস একই URL এর উত্তর দিতে পারে, প্রথমটি নিবন্ধিত জয়ী হয়, এবং Nexy সর্বদা এই ক্রমে নিবন্ধন করে:
- অ্যাকশন এন্ডপয়েন্ট;
- স্ট্যাটিক ফাইল:
/public,/assets,/favicon.ico; - একটি মডুলার
APIRouter(useRouter); - ফাইল রুট, সবচেয়ে নির্দিষ্ট প্রথম: স্ট্যাটিক পাথ, তারপর সবচেয়ে নির্দিষ্ট সেগমেন্ট সহ গতিশীল পাথ, তারপর ক্যাচ-অল।
সমান নির্দিষ্টতার দুটি ফাইল রুট বর্ণানুক্রমিক পাথ ক্রমানুসারে নিবন্ধিত হয়, তাই [id].nexy [slug].nexy এর আগে উত্তর দেয়। একটি মডুলার রুট তাই একই পথের সাথে একটি পৃষ্ঠাকে বীট করে। এটি একটি অগ্রাধিকার আদেশ যা আপনি নির্ভর করতে পারেন, খেলার জন্য টাই-ব্রেক নিয়ম নয়: একটি URL একটি ফাইল দিন৷
ভিউ সিস্টেম
একটি ফাইলের এক্সটেনশন নির্ধারণ করে যে এটি কী, এবং প্রকল্প কনফিগ সিদ্ধান্ত নেয় কোন এক্সটেনশনগুলি সক্রিয়।
| এক্সটেনশন | সক্রিয় যখন | দ্বারা সংকলিত | হিসেবে পরিবেশন করেন |
|---|---|---|---|
.nexy |
সার্ভার মোড | নেক্সি: ফ্রন্টম্যাটার হয়ে যায় Python, মার্কআপ হয়ে যায় Jinja2 | একটি পৃষ্ঠা |
.md |
সবসময় | নেক্সি: গিটহাব-স্বাদযুক্ত Markdown, শিরোনাম আইডি, বিষয়বস্তুর সারণী | একটি পৃষ্ঠা, নিকটতম লেআউটের ভিতরে |
.mdx |
সবসময় | Vite, React বা Preact সহ | একটি উপাদান রুট |
.tsx |
useFF হল React, Solid বা Preact |
Vite এবং কাঠামো | একটি উপাদান রুট |
.vue |
useFF হল Vue |
Vite এবং Vue | একটি উপাদান রুট |
.svelte |
useFF হল Svelte |
Vite এবং Svelte | একটি উপাদান রুট |
.py |
সবসময় | Python | একটি API হ্যান্ডলার: GET, POST, ... হল পদ্ধতি |
একটি ফাইল যার এক্সটেনশন সক্রিয় নয় একটি সতর্কতা সহ বাদ দেওয়া হয়, পরিবেশন করা হয় না। ক্লায়েন্ট মোডে, সার্ভার শুরু হওয়ার আগে .nexy প্রত্যাখ্যান করা হয়। দেখুন ফাইল কনভেনশন।
রেন্ডারিং জীবনচক্র
তিনটি প্রশ্ন একটি পাঠক নোটিশ সবকিছু নির্ধারণ:
| প্রশ্ন | উত্তর | পাতা |
|---|---|---|
| এইচটিএমএল কে তৈরি করে? | সার্ভার, বা ক্লায়েন্ট রুটের জন্য ব্রাউজার | রেন্ডারিং |
| ডেটা কখন পড়া হয়? | প্রতিটি অনুরোধে, প্রতিটি পুনর্জন্মে বা ব্রাউজারে | SSR, ISR |
| কখন JavaScript আসে? | শুধুমাত্র একটি দ্বীপের জন্য বা পুরো নথির জন্য | দ্বীপপুঞ্জ, CSR |
সার্ভার মোডে সার্ভার প্রতিটি পৃষ্ঠা রেন্ডার করে, revalidate প্রতি ইউআরএলে একটি পৃষ্ঠা ক্যাশ করে এবং দ্বীপগুলি একটি উপাদানে JavaScript যোগ করে। ক্লায়েন্ট মোডে প্রথম নথিটি নোডে রেন্ডার করা হয় এবং নেভিগেশন তারপর ব্রাউজারে ঘটে।
__nexy__/ উত্পন্ন সবকিছু ধারণ করে: সংকলিত পৃষ্ঠা, ক্লায়েন্ট এন্ট্রি, বিল্ড আউটপুট। এটি কখনই সম্পাদনা করবেন না, এটি কখনও করবেন না; একটি পরিষ্কার বিল্ড জোর করে এটি মুছুন.
ফ্রন্টএন্ড ইন্টিগ্রেশন
Vite প্রতিস্থাপন করে না নেক্সি Vite ক্লায়েন্ট কোড বান্ডিল করে এটি একটি অনুরোধ রুট করে না, একটি .nexy পৃষ্ঠা রেন্ডার করে, একটি অ্যাকশন চালায় বা মূলের মালিক হয় না। ব্রাউজারটি একটি মূলের সাথে কথা বলে - Nexy এর - এবং বিকাশে Nexy proxies Vite এর এন্ডপয়েন্ট এর মাধ্যমে, তাই কনফিগার করার জন্য কোন CORS নেই।
Nexy প্রতিস্থাপন না React. Nexy সিদ্ধান্ত নেয় কোন উপাদান রেন্ডার করে, কখন, এবং কোন প্রপস দিয়ে; কাঠামোটি উপাদান মডেল, প্রতিক্রিয়াশীলতা এবং বাস্তুতন্ত্রের মালিক। একটি .nexy পৃষ্ঠা একটি দ্বীপ হিসাবে একটি উপাদান আমদানি করে; ক্লায়েন্ট মোডে একটি রুট * একটি উপাদান।
একটি কম্পোনেন্ট রুটের জন্য, Python শুধুমাত্র একটি পাতলা মোড়ক মডিউল লেখে যা ফাইলের দিকে নির্দেশ করে। সংকলন এবং সার্ভার-সাইড রেন্ডারিং হল Vite এর কাজ।
উন্নয়ন এবং উৎপাদন
nx dev চেক করে nexyconfig.py, পৃষ্ঠাগুলি কম্পাইল করে, শুরু হয় Vite যখন প্রজেক্টের ফ্রন্টএন্ড ফ্রেমওয়ার্ক থাকে এবং আপনি যখন সেভ করেন তখন সার্ভার রিস্টার্ট করে। nx build একই কাজ একবার করে, সময়ের আগে, এবং nx start ফলাফল দেয়।
nx dev |
nx build তারপর nx start |
|
|---|---|---|
| পাতা | আপনি সংরক্ষণ যখন সংকলিত | একবার সংকলিত, সময়ের আগে |
| ক্লায়েন্ট কোড | Vite হট রিলোড সহ dev সার্ভার, Nexy এর নিজস্ব মূলের পিছনে | __nexy__/client/-এ বান্ডেল, প্রাক-রেন্ডার করা HTML |
| Node.js | পাশে চলে Python | পরিবেশন করার প্রয়োজন নেই |
| ত্রুটি | ব্রাউজারে ওভারলে, প্রতিটি পৃষ্ঠায় টুলবার | বিশদ বিবরণ ছাড়া স্ট্যাটাস পেজ |
| উৎপত্তি | একটি বন্দর, 3000 |
একটি বন্দর |
কি পরিবর্তন হয় না: একই রাউটিং নিয়ম, একই পৃষ্ঠা ফাইল, একই nexyconfig.py। একটি পৃষ্ঠা যা উভয়ের মধ্যে ভিন্নভাবে আচরণ করে সেটি একটি বাগ, একটি মোড নয়।
Nexy আপনার কাছে যা রেখে যায়
Nexy উদ্দেশ্যমূলকভাবে আপনার অ্যাপ্লিকেশনের প্রান্তে থামে:
| উদ্বেগ | Nexy কি প্রদান করে | আপনি কি লিখুন |
|---|---|---|
| প্রমাণীকরণ | সেশন মিডলওয়্যার, AuthenticationMiddleware সক্রিয় করা হলে |
লগইন, ব্যবহারকারীর সন্ধান, কুকি নীতি |
| অনুমোদন | dependencies.py, প্রহরী, প্রতি-ফোল্ডার উত্তরাধিকার |
নিয়ম নিজেই |
| ডাটাবেস | নিজস্ব কোন ORM; nx new ভারা পারে SQLModel, SQLAlchemy বা Tortoise, nx migrate রান Alembic বা Aerich |
মডেল এবং প্রশ্ন (ডাটাবেস) |
| আন্তর্জাতিকীকরণ | আপনার পৃষ্ঠাগুলির জন্য কিছুই নেই; শুধুমাত্র CLI অনুবাদ করা হয় | লাইব্রেরি এবং বার্তা (i18n) |
| পটভূমি কাজ | কিছুই না: কোন সারি নেই, কোন সময়সূচী নেই | একটি কর্মী প্রক্রিয়া |
| ইমেল, অর্থপ্রদান, অনুসন্ধান | কিছুই না | আপনার চয়ন করা পরিষেবা |
কারণটি ছয়টির জন্যই একই: একটি ফ্রেমওয়ার্ক যা আপনার ORM বা আপনার প্রমাণীকরণ লাইব্রেরি বাছাই করে এমন জিনিসগুলি নির্ধারণ করে যা শুধুমাত্র আপনার অ্যাপ্লিকেশন সিদ্ধান্ত নিতে পারে। খরচ সুস্পষ্ট: আপনার জন্য কিছুই তারযুক্ত নয়, এবং টেবিলে লিঙ্ক করা গাইড প্রতিটিকে কোথায় প্লাগ ইন করতে হবে তা বলে।
পরবর্তী পদক্ষেপ
- প্রকল্প কাঠামো : যেখানে প্রতিটি অংশ একটি প্রকল্পে থাকে
- রাউটিং : ফাইল-ভিত্তিক, মডুলার এবং কাস্টম রাউটার
- রেন্ডারিং : SSR, ISR, CSR এবং দ্বীপপুঞ্জ
- ফ্রন্টএন্ড: Vite, স্টাইলিং এবং ক্লায়েন্ট বিল্ড