दस्तावेज़उन्नत

नेक्सी कैसे काम करती है

आपके द्वारा लिखी गई फ़ाइल और ब्राउज़र में पेज के बीच क्या होता है: अनुरोध किन परतों को पार करता है, कौन क्या बनाता है, और नेक्सी आपके एप्लिकेशन पर क्या छोड़ता है। प्रारंभ करने के लिए आपको इस पृष्ठ की आवश्यकता नहीं है; यह "यह उस तरह क्यों काम करता है" प्रश्नों का उत्तर बाद में देता है।

परतें

एक अनुरोध, पाँच परतें
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 क्लाइंट बंडल, डेव सर्वर, हॉट रीलोड रूटिंग, सर्वर रेंडरिंग, क्रियाएँ
आपका ढांचा घटक, प्रतिक्रियाशीलता, पारिस्थितिकी तंत्र रूटिंग, दस्तावेज़ (नेक्सी इसके लिए इसका लेआउट पूछता है)
आपका आवेदन डेटा, प्रमाणीकरण, प्राधिकरण, व्यावसायिक नियम परिवहन, प्रतिपादन

तालिका के पीछे का नियम: नेक्सी वही बनाता है जो उसके पास है, और जो Vite संकलित करता है उसे कभी संकलित नहीं करता है।

रूटिंग सिस्टम

src/routes/ के अंतर्गत एक पथ चार नियमों द्वारा एक यूआरएल बन जाता है:

फ़ाइल यूआरएल
blog/index.nexy /blog
blog/[slug].nexy /blog/hello
blog/[...parts].nexy /blog/a/b
(marketing)/about.nexy /about

विस्तार कभी प्रकट नहीं होता; index इसके फ़ोल्डर का मार्ग है; कोष्ठक में एक फ़ोल्डर बिना खंड जोड़े फाइलों को समूहित करता है।

जब दो चीजें एक ही यूआरएल का उत्तर दे सकती हैं, पहला पंजीकृत जीतता है, और नेक्सी हमेशा इस क्रम में पंजीकृत होती है:

  1. क्रियाएँ समापन बिंदु;
  2. स्थिर फ़ाइलें: /public, /assets, /favicon.ico;
  3. एक मॉड्यूलर APIRouter (useRouter);
  4. फ़ाइल रूट, सबसे पहले सबसे विशिष्ट: स्थिर पथ, फिर सबसे निश्चित खंडों के साथ गतिशील पथ, फिर कैच-ऑल।

समान विशिष्टता के दो फ़ाइल मार्ग वर्णमाला पथ क्रम में पंजीकृत हैं, इसलिए [id].nexy [slug].nexy से पहले उत्तर देता है। इसलिए एक मॉड्यूलर मार्ग उसी पथ वाले पृष्ठ को मात देता है। यह एक प्राथमिकता क्रम है जिस पर आप भरोसा कर सकते हैं, न कि कोई टाई-ब्रेक नियम जिसके साथ खेला जा सकता है: एक यूआरएल एक फ़ाइल दें।

दृश्य प्रणाली

किसी फ़ाइल का एक्सटेंशन तय करता है कि वह क्या है, और प्रोजेक्ट कॉन्फ़िगरेशन तय करता है कि कौन से एक्सटेंशन सक्रिय हैं।

विस्तार कब सक्रिय द्वारा संकलित के रूप में सेवा की
.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 एक एपीआई हैंडलर: GET, POST, ... विधियाँ हैं

एक फ़ाइल जिसका एक्सटेंशन सक्रिय नहीं है, उसे चेतावनी के साथ छोड़ दिया जाता है, प्रस्तुत नहीं किया जाता है। क्लाइंट मोड में, .nexy सर्वर शुरू होने से पहले खारिज कर दिया जाता है। फ़ाइल कन्वेंशन देखें।

प्रतिपादन जीवनचक्र

तीन प्रश्न वह सब कुछ तय करते हैं जो एक पाठक नोटिस करता है:

प्रश्न उत्तर पेज
HTML का निर्माण कौन करता है? सर्वर, या क्लाइंट रूट के लिए ब्राउज़र प्रतिपादन
डेटा कब पढ़ा जाता है? प्रत्येक अनुरोध पर, प्रत्येक पुनर्जनन पर, या ब्राउज़र में एसएसआर, आईएसआर
JavaScript कब आता है? केवल एक द्वीप के लिए, या संपूर्ण दस्तावेज़ के लिए द्वीप, सीएसआर

सर्वर मोड में सर्वर प्रत्येक पेज को रेंडर करता है, revalidate प्रति यूआरएल एक पेज को कैश करता है, और आइलैंड्स JavaScript को एक घटक में जोड़ता है। क्लाइंट मोड में पहला दस्तावेज़ नोड में प्रस्तुत किया जाता है और नेविगेशन उसके बाद ब्राउज़र में होता है।

__nexy__/ उत्पन्न सब कुछ रखता है: संकलित पृष्ठ, क्लाइंट प्रविष्टि, बिल्ड आउटपुट। इसे कभी संपादित न करें, इसे कभी प्रतिबद्ध न करें; साफ़ निर्माण के लिए इसे हटाएँ।

अग्रभाग एकीकरण

Vite नेक्सी को प्रतिस्थापित नहीं करता है। Vite बंडल करता है और क्लाइंट कोड परोसता है। यह किसी अनुरोध को रूट नहीं करता है, .nexy पेज को प्रस्तुत नहीं करता है, कोई कार्रवाई नहीं चलाता है या मूल का स्वामी नहीं है। ब्राउज़र एक मूल - नेक्सी - से बात करता है और विकास में नेक्सी इसके माध्यम से Vite के समापन बिंदुओं को प्रॉक्सी करता है, इसलिए कॉन्फ़िगर करने के लिए कोई सीओआरएस नहीं है।

नेक्सी React को प्रतिस्थापित नहीं करता है। नेक्सी यह तय करता है कि कौन सा घटक, कब और किस प्रॉप्स के साथ प्रस्तुत होता है; फ्रेमवर्क घटक मॉडल, प्रतिक्रियाशीलता और पारिस्थितिकी तंत्र का मालिक है। एक .nexy पृष्ठ एक घटक को एक द्वीप के रूप में आयात करता है; क्लाइंट मोड में एक रूट एक घटक है।

एक घटक मार्ग के लिए, Python केवल एक पतला रैपर मॉड्यूल लिखता है जो फ़ाइल पर इंगित करता है। संकलन और सर्वर-साइड रेंडरिंग Vite का काम है।

विकास एवं उत्पादन

nx dev जाँच करता है nexyconfig.py, पृष्ठों को संकलित करता है, Vite शुरू करता है जब प्रोजेक्ट में फ्रंटएंड फ्रेमवर्क होता है, और जब आप सहेजते हैं तो सर्वर को पुनरारंभ करता है। nx build एक ही काम को समय से पहले एक बार करता है, और nx start परिणाम देता है।

nx dev nx build फिर nx start
पन्ने जब आप सहेजते हैं तो संकलित किया जाता है समय से पहले एक बार संकलित किया गया
ग्राहक कोड Vite हॉट रीलोड के साथ डेव सर्वर, नेक्सी की अपनी उत्पत्ति के पीछे __nexy__/client/ में बंडल, पूर्व-रेंडर HTML
Node.js Python के बगल में चलता है सेवा करने की आवश्यकता नहीं है
त्रुटियाँ ब्राउज़र में ओवरले, प्रत्येक पृष्ठ पर टूलबार विवरण के बिना स्थिति पृष्ठ
उत्पत्ति एक बंदरगाह, 3000 एक बंदरगाह

क्या नहीं बदलता: वही रूटिंग नियम, वही पेज फ़ाइलें, वही nexyconfig.py। एक पेज जो दोनों के बीच अलग-अलग व्यवहार करता है वह एक बग है, मोड नहीं।

नेक्सी आप पर क्या छोड़ती है

नेक्सी आपके एप्लिकेशन के किनारे पर जानबूझकर रुकती है:

चिंता नेक्सी क्या प्रदान करता है आप क्या लिखते हैं
प्रमाणीकरण सत्र मिडलवेयर, AuthenticationMiddleware सक्षम होने पर लॉगिन, उपयोगकर्ता लुकअप, कुकी नीति
प्राधिकरण dependencies.py, गार्ड, प्रति-फ़ोल्डर विरासत नियम ही
डेटाबेस अपना कोई ORM नहीं; nx new मचान बना सकता है SQLModel, SQLAlchemy या Tortoise, nx migrate रन Alembic या Aerich मॉडल और प्रश्न (डेटाबेस)
अंतर्राष्ट्रीयकरण आपके पृष्ठों के लिए कुछ भी नहीं; केवल सीएलआई का अनुवाद किया गया है लाइब्रेरी और संदेश (i18n)
पृष्ठभूमि नौकरियाँ कुछ नहीं: कोई कतार नहीं, कोई शेड्यूलर नहीं एक कार्यकर्ता प्रक्रिया
ईमेल, भुगतान, खोज कुछ नहीं आपके द्वारा चुनी गई सेवा

कारण सभी छह के लिए समान है: एक ढांचा जो आपके ओआरएम या आपकी ऑथ लाइब्रेरी को चुनता है वह चीजें तय करता है जो केवल आपका एप्लिकेशन तय कर सकता है। लागत स्पष्ट है: आपके लिए कुछ भी वायर्ड नहीं है, और तालिका में लिंक किए गए गाइड बताते हैं कि प्रत्येक को कहां प्लग इन करना है।

अगले चरण

GitHub पर संपादित करें

Enter परिणाम खोलता है, Esc बंद करता है।