Node.js प्रोजेक्ट के लिए फ़ोल्डर संरचना


346

मुझे लगता है कि Node.js परियोजनाओं में अक्सर इस तरह के फ़ोल्डर शामिल होते हैं:

/ lib, / विक्रेता, / सहायता, / युक्ति, / परीक्षण

वास्तव में इनका क्या मतलब है? उनके बीच क्या अंतर है, और मुझे संदर्भित कोड कहां शामिल करना चाहिए?

जवाबों:


439

आपके द्वारा उल्लेखित फोल्डर के बारे में:

  • /libs आमतौर पर कस्टम के लिए प्रयोग किया जाता है classes/functions/modules
  • /vendorया /supportतृतीय पक्ष लाइब्रेरी शामिल है (स्रोत नियंत्रण के रूप में गिट का उपयोग करते समय गिट उप-मॉड्यूल के रूप में जोड़ा गया)
  • /spec बीडीडी परीक्षणों के लिए विनिर्देश शामिल हैं।
  • /testsएक आवेदन के लिए यूनिट-परीक्षण होता है (परीक्षण ढांचे का उपयोग करके, यहां देखें )

नोट: दोनों /vendorऔर /supportअनुचित हैं के बाद से NPM एक साफ पैकेज प्रबंधन की शुरुआत की। एनपीएम और एक पैकेज.जसन फ़ाइल का उपयोग करके सभी 3-पार्टी निर्भरता को संभालने की सिफारिश की गई है

जब एक नहीं बल्कि बड़े अनुप्रयोग का निर्माण, मैं निम्नलिखित अतिरिक्त फ़ोल्डर (खासकर यदि आप की तरह MVC- / ORM-फ्रेमवर्क किसी तरह का प्रयोग कर रहे हैं की सिफारिश एक्सप्रेस या नेवला ):

  • /modelsआपके सभी ORM मॉडल ( Schemasमूंगोज़ में कहे गए) शामिल हैं
  • /views आपके व्यू-टेंपलेट्स (एक्सप्रेस में समर्थित किसी भी टेम्प्लेटिंग भाषा का उपयोग करके)
  • /public सभी स्थिर सामग्री (चित्र, शैली-पत्रक, क्लाइंट-साइड जावास्क्रिप्ट) शामिल हैं
    • /assets/images छवि फ़ाइलें हैं
    • /assets/pdf स्थिर पीडीएफ फाइलें शामिल हैं
    • /css स्टाइल शीट शामिल हैं (या एक सीएसएस इंजन द्वारा संकलित आउटपुट)
    • /js क्लाइंट साइड जावास्क्रिप्ट शामिल हैं
  • /controllersअपने सभी एक्सप्रेस मार्गों को अपने एप्लिकेशन के मॉड्यूल / क्षेत्र द्वारा अलग करें (ध्यान दें: एक्सप्रेस के बूटस्ट्रैपिंग कार्यक्षमता का उपयोग करते समय, यह फ़ोल्डर कहा जाता है /routes)

मुझे अपनी परियोजनाओं को इस तरह व्यवस्थित करने की आदत है और मुझे लगता है कि यह बहुत अच्छी तरह से काम करता है।

CoffeeScript- आधारित एक्सप्रेस अनुप्रयोगों ( कनेक्ट-एसेट का उपयोग करके ) के लिए अपडेट करें :

  • /app अपने संकलित जावास्क्रिप्ट शामिल हैं
  • /assets/ इसमें सभी क्लाइंट-साइड एसेट शामिल हैं, जिन्हें संकलन की आवश्यकता है
    • /assets/js आपकी क्लाइंट-साइड कॉफीस्क्रिप्ट फाइलें शामिल हैं
    • /assets/css इसमें आपकी सभी लेस / स्टाइलस शैली-शीट शामिल हैं
  • /public/(js|css|img) आपकी स्थिर फ़ाइलें हैं जो किसी भी संकलक द्वारा नियंत्रित नहीं की जाती हैं
  • /src आपके सभी सर्वर-साइड विशिष्ट कॉफीस्क्रिप्ट फ़ाइलें हैं
  • /test सभी इकाई परीक्षण स्क्रिप्ट शामिल हैं (अपनी पसंद के परीक्षण-ढांचे का उपयोग करके कार्यान्वित)
  • /views आपके सभी व्यक्त विचार शामिल हैं (यह जेड, ईजेएस या किसी अन्य अस्थायी इंजन हो)

5
आप अपने क्लाइंट-साइड js, css, चित्र कहां डालेंगे? क्या आप सार्वजनिक फ़ोल्डर में एक समान फ़ोल्डर संरचना का सुझाव देंगे, जैसे: सार्वजनिक / संपत्ति सार्वजनिक / संपत्ति / सीएसएस सार्वजनिक / संपत्ति / छवियां सार्वजनिक / संपत्ति / डॉक्स सार्वजनिक / काम जनता / समर्थन सार्वजनिक / परीक्षण सार्वजनिक / मॉडल जनता / विचार सार्वजनिक / नियंत्रकों ?
ezmilhouse

2
एक्सप्रेसजेस एक ./routes निर्देशिका बनाता है, क्या यह आपके उदाहरण में ./controllers के समान है?
चॉवी

2
आप उस प्रस्ताव के साथ एक योमन जनरेटर क्यों नहीं बनाते हैं? यह एक मानक बन सकता है।
Jayr Motta

+1 ASP.NET MVC से आ रहा है, "रूट" फ़ोल्डर "नियंत्रकों" को कॉल करना मेरे लिए बहुत अधिक मायने रखता है।
adam0101

प्रश्न, निर्देशिका संरचना सामान्य रूप से फ्रेमवर्क द्वारा उत्पन्न नहीं होती (यानी PHP के लिए सिम्फनी)? उदाहरण के लिए एक्सप्रेस के साथ, कोई निर्देशिका संरचना सही नहीं बनाई गई है? डेवलपर्स MVC डिज़ाइन और मार्गों को मैन्युअल रूप से बनाने और बनाए रखने के लिए हैं? मैं किसी भी प्रतिक्रिया की सराहना करता हूं, मैं एक्सप्रेस में नया हूं
AnchovyLegend

49

इस तरह के एक सवाल के कारण GitHub पर चर्चा चल रही है: https://gist.github.com/1398757

आप मार्गदर्शन के लिए अन्य परियोजनाओं का उपयोग कर सकते हैं, इसके लिए GitHub में खोजें:

  • थ्री नोड्स.जेएस - मेरी राय में, ऐसा लगता है कि एक विशिष्ट संरचना हर परियोजना के लिए उपयुक्त नहीं है;
  • लाइटर - एक अधिक सरल संरचना, लेकिन संगठन का थोड़ा अभाव;

और अंत में, एक पुस्तक में ( http://shop.oreilly.com/product/0636920025344.do ) इस संरचना का सुझाव देता है:

├── index.html
├── js/
   ├── main.js
   ├── models/
   ├── views/
   ├── collections/
   ├── templates/
   └── libs/
       ├── backbone/
       ├── underscore/
       └── ...
├── css/
└── ...

मैंने गतिशील रूप से फ़ाइलों की आवश्यकता के लिए एक मॉड्यूल बनाया, जिससे आप अपने प्रोजेक्ट को विशिष्ट मॉडल, व्यू, कंट्रोलर के बजाय फीचर द्वारा संरचित कर सकते हैं। आशा है कि यह किसी की मदद करता है: github.com/ssmereka/crave
स्कॉट

13

मेरी परियोजना वास्तुकला से अधिक उदाहरण आप यहां देख सकते हैं:

├── Dockerfile
├── README.md
├── config
   └── production.json
├── package.json
├── schema
   ├── create-db.sh
   ├── db.sql
├── scripts
   └── deploy-production.sh 
├── src
   ├── app -> Containes API routes
   ├── db -> DB Models (ORM)
   └── server.js -> the Server initlializer.
└── test

मूल रूप से, तार्किक ऐप SRC dir के अंदर DB और APP फ़ोल्डर में अलग हो गया।


अगर आपके ऐप में फ्रंट एंड ऐप भी है, तो क्या आप इसके अंतर्गत srcया सामने वाले ऐप को अपना स्वयं का फ़ोल्डर (अपने package.jsonऔर समान डेटा संरचना के साथ) प्राप्त करते हैं?
वाल

2
@ मैं एक और रिपोजिटरी के लिए फ्रंटेंड प्रोजेक्ट्स को अलग करना पसंद करता हूं क्योंकि यह अधिक संगठित है
डैनियल चेर्नेंकोव

2

यह अप्रत्यक्ष उत्तर है, फ़ोल्डर संरचना पर ही, बहुत संबंधित है।

कुछ साल पहले मेरे पास एक ही सवाल था, एक फ़ोल्डर संरचना ली, लेकिन बाद में चलते हुए एक बहुत निर्देशिका करना था, क्योंकि फ़ोल्डर एक अलग उद्देश्य के लिए था, जो मैंने इंटरनेट पर पढ़ा है, अर्थात्, एक विशेष फ़ोल्डर में क्या है कुछ फ़ोल्डरों पर अलग-अलग लोगों के लिए अलग-अलग अर्थ।

अब, कई प्रोजेक्ट्स किए जा रहे हैं, अन्य सभी उत्तरों में स्पष्टीकरण के अलावा, फ़ोल्डर संरचना पर ही, मैं दृढ़ता से स्वयं Node.js की संरचना का पालन करने का सुझाव दूंगा, जिसे यहां देखा जा सकता है: https://github.com/ नोडज / नोड । यह सभी पर महान विवरण है, लिंटर और अन्य, क्या फ़ाइल और फ़ोल्डर संरचना उनके पास है और कहां है। कुछ फ़ोल्डर्स में एक README होता है जो बताता है कि उस फ़ोल्डर में क्या है।

उपर्युक्त संरचना में शुरू करना अच्छा है क्योंकि किसी दिन एक नई आवश्यकता आती है, लेकिन आपके पास सुधार करने की गुंजाइश होगी क्योंकि यह पहले से ही Node.js द्वारा पीछा किया जाता है जो अब कई वर्षों से बनाए रखा गया है।

उम्मीद है की यह मदद करेगा।


1

यह ध्यान रखना महत्वपूर्ण है कि सबसे अच्छा दृष्टिकोण और सामान्य रूप से संबंधित रूपरेखाओं पर कोई आम सहमति नहीं है और न ही कुछ संरचनाओं को पुरस्कृत करते हैं।

मैं इसे एक निराशा और भारी उपरि होने के लिए समान रूप से महत्वपूर्ण मानता हूं। यह शैली गाइड के मुद्दे के एक डाउनप्लेड संस्करण (लेकिन IMO अधिक महत्वपूर्ण) की तरह है । मुझे यह इंगित करना पसंद है क्योंकि इसका उत्तर समान है: इससे कोई फर्क नहीं पड़ता कि आप किस संरचना का उपयोग करते हैं जब तक कि यह अच्छी तरह से परिभाषित और सुसंगत न हो

इसलिए मैं एक व्यापक मार्गदर्शिका की तलाश करना चाहता हूं जो आपको पसंद हो और यह स्पष्ट करे कि परियोजना इस पर आधारित है।

यह आसान नहीं है, खासकर यदि आप इसके लिए नए हैं! घंटों शोध करने की उम्मीद है। आपको MVC जैसी संरचना की अनुशंसा करने वाले अधिकांश मार्गदर्शक मिलेंगे। जबकि कई साल पहले जो एक ठोस विकल्प हो सकता था, आजकल वह जरूरी नहीं है। उदाहरण के लिए यहां एक और दृष्टिकोण है


1

हम वेब अनुप्रयोगों और एपीआई के निर्माण के बारे में बात कर रहे हैं:

एक तरीका है फाइलों को फीचर द्वारा वर्गीकृत करना , बहुत कुछ ऐसा जैसा माइक्रो सर्विस आर्किटेक्चर जैसा दिखता है। मेरी राय में सबसे बड़ी जीत यह है कि यह देखना आसान है कि कौन सी फाइलें एप्लिकेशन की एक विशेषता से संबंधित हैं।

उदाहरण के माध्यम से वर्णन करने का सबसे अच्छा तरीका है:


हम एक पुस्तकालय अनुप्रयोग विकसित कर रहे हैं। अनुप्रयोग के पहले संस्करण में, एक उपयोगकर्ता कर सकता है:

  • पुस्तकों की खोज करें और पुस्तकों का मेटाडेटा देखें
  • लेखकों के लिए खोजें और उनकी किताबें देखें

दूसरे संस्करण में, उपयोगकर्ता यह भी कर सकते हैं:

  • एक खाता बनाएँ और लॉग इन करें
  • ऋण / उधार पुस्तकें

एक तीसरे संस्करण में, उपयोगकर्ता भी कर सकते हैं:

  • उन पुस्तकों की एक सूची सहेजें जिन्हें वे पसंदीदा पढ़ना / चिह्नित करना चाहते हैं

पहले हमारे पास निम्नलिखित संरचना है:

books
  ├─ controllers
     ├─ booksController.js
     └─ authorsController.js
  
  └─ entities
      ├─ book.js
      └─ author.js

हम फिर उपयोगकर्ता और ऋण सुविधाओं पर जोड़ते हैं:

user
  ├─ controllers
     └─ userController.js
  ├─ entities
     └─ user.js
  └─ middleware
       └─ authentication.js
loan
  ├─ controllers
     └─ loanController.js
  └─ entities
      └─ loan.js

और फिर पसंदीदा कार्यक्षमता:

favorites
  ├─ controllers
     └─ favoritesController.js
  └─ entities
      └─ favorite.js

किसी भी नए डेवलपर के लिए जो इस बात को जोड़ने का काम सौंपता है कि किताबों की खोज की जानकारी भी वापस आनी चाहिए, यदि कोई पुस्तक पसंदीदा के रूप में चिह्नित की गई है, तो यह देखना आसान है कि कोड में उसे कहाँ दिखना चाहिए।

फिर जब उत्पाद स्वामी स्वीप करता है और दावा करता है कि पसंदीदा सुविधा को पूरी तरह से हटा दिया जाना चाहिए, तो इसे निकालना आसान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.