Node.js फ़ाइलों और फ़ोल्डरों के लिए प्रोजेक्ट नामकरण परंपराएँ


116

एक बड़ी Node.js परियोजना में फ़ाइलों और फ़ोल्डरों के लिए नामकरण परंपराएं क्या हैं?

क्या मुझे कैपिटल, कैमसेल कै, या अंडर-स्कोर करना चाहिए?

अर्थात। क्या यह वैध माना जाता है?

project-name
    app
        controllers
            someThings.js
            users.js
        models
                someThing.js
                user.js
        views
            some-things
                index.jade
            users
                logIn.jade
                signUp.jade
    ...

3
अत्यधिक व्यक्तिपरक, आपकी निर्देशिका संरचना आपकी अपनी है। व्यक्तिगत रूप से मुझे कैमलकेज पसंद है क्योंकि मैं जेएस में क्या करता हूं
चाड

@Chad - Node.js में, requireनिर्देशिका स्ट्रिंग को एक पैरामीटर के रूप में लेता है, यही कारण है कि यह पूरी तरह से आपका अपना नहीं है। अर्थात। require('../app/controllers/someThings');
रुडिगर

3
नामकरण मॉड्यूल के नामकरण के लिए किसी भी सुझाव या मानकों को निर्दिष्ट नहीं करता है, जब तक कि वे मान्य फ़ाइल / निर्देशिका नाम हैं और मुख्य मॉड्यूल नामों को ओवरराइड करने का प्रयास न करें । अपने स्वयं के मॉड्यूल के लिए, यह संक्षिप्त ( fs), एकल-शब्द ( events), अंडरस्कोर ( child_process) और लोअरकेस ( querystring) के मिश्रण का उपयोग करता है ।
जोनाथन लोनोव्स्की

1
@Rudiger तो? आप जो चाहें स्ट्रिंग निर्दिष्ट कर सकते हैं, और निर्देशिका संरचना जो आप चाहते हैं वह आपके पास हो सकती है (बशर्ते आपके नाम निश्चित रूप से मान्य फ़ाइल नाम हों)।
चाड

मैं और अधिक कीस्टोन परियोजनाओं के आसपास poking से कह सकता हूं जैसे कि मोचा फ़ाइल नाम जैसे कप्तान-भयानक- file.js काफी सामान्य लगते हैं। कि मैं कम से कम उपयोग करने जा रहा हूँ!
चार्ल्स फेंटेन्चक

जवाबों:


154

नोड के साथ कुछ वर्षों के बाद, मैं कह सकता हूं कि निर्देशिका / फ़ाइल संरचना के लिए कोई सम्मेलन नहीं हैं । हालाँकि अधिकांश (व्यावसायिक) एक्सप्रेस एप्लिकेशन एक सेटअप का उपयोग करते हैं जैसे:

/
  /bin - scripts, helpers, binaries
  /lib - your application
  /config - your configuration
  /public - your public files
  /test - your tests

एक उदाहरण जो इस सेटअप का उपयोग करता है वह है नोडजेस-स्टार्टर

मैंने इस सेटअप को व्यक्तिगत रूप से बदल दिया है:

/
  /etc - contains configuration
  /app - front-end javascript files
    /config - loads config
    /models - loads models
  /bin - helper scripts
  /lib - back-end express files
    /config - loads config to app.settings
    /models - loads mongoose models
    /routes - sets up app.get('..')...
  /srv - contains public files
  /usr - contains templates
  /test - contains test files

मेरी राय में, बाद वाला यूनिक्स-शैली निर्देशिका संरचना के साथ बेहतर मेल खाता है (जबकि पूर्व इसे थोड़ा सा मिलाता है)।

मुझे यह पैटर्न अलग फ़ाइलों के लिए भी पसंद है:

lib / index.js

var http = require('http');
var express = require('express');

var app = express();

app.server = http.createServer(app);

require('./config')(app);

require('./models')(app);

require('./routes')(app);

app.server.listen(app.settings.port);

module.exports = app;

lib / स्थिर / index.js

var express = require('express');

module.exports = function(app) {

  app.use(express.static(app.settings.static.path));

};

यह निर्भरता को परेशान किए बिना बड़े करीने से सभी स्रोत कोड को डिकोड करने की अनुमति देता है। बुरा जावास्क्रिप्ट से लड़ने के लिए एक बहुत अच्छा समाधान। एक वास्तविक दुनिया का उदाहरण पास में है जो इस सेटअप का उपयोग करता है।

अद्यतन (फ़ाइल नाम):

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

अद्यतन (चर):

चरों के संबंध में, फ़ाइल नाम के समान "नियम" लागू होते हैं। प्रोटोटाइप या कक्षाएं, हालांकि, कैमलकेस का उपयोग करना चाहिए ।

अद्यतन (स्टाइलगाइड):


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

3
@ Tronix117 क्या समस्या है? सवाल "फाइलों और फ़ोल्डरों के लिए प्रोजेक्ट नामकरण सम्मेलनों" के लिए पूछता है? और नामकरण केवल फ़ाइल नाम तक ही सीमित नहीं है क्योंकि इसमें पूरा पथ नाम भी शामिल है।
बोडोकैसर

24
बेशक, लेकिन लेखक विशेष रूप से पूछते हैं "क्या मुझे कैपिटलाइज़ करना चाहिए, कैमलकेज़, या अंडर-स्कोर?"। जब वह अपनी छूट लिखता है, तो उसने स्पष्ट रूप से 'someThings' और 'some-things' को केवल यह जानने के लिए रखा है कि क्या इसे वैध माना जा सकता है। जब मैं इस विषय पर गया तो मुझे इस विशिष्ट प्रश्न का उत्तर मिलने की उम्मीद थी, और यह जानने के लिए कि आमतौर पर फ़ाइल नामकरण के रूप में क्या उपयोग किया जाता है। मैं नहीं कहता कि आपका उत्तर गलत है, यह अपने उद्देश्य के लिए एकदम सही है, लेकिन मेरे दिमाग में अधूरा है क्योंकि वह वास्तव में मुख्य प्रश्न का उत्तर नहीं देता है।
Tronix117

5
मुझे लगता है आपने मुझे गलत समझ लिया ;)। मैं बस एक ऐसी चीज की तलाश में था जो मुझे स्वीकृत उत्तर पर नहीं मिली, लेकिन विशेष रूप से पूछा गया था, किसी भी तरह से नफरत नहीं फैलाना, आप इस पर थोड़ा दूर जा रहे हैं। मैं चाहता था कि आप उत्तर के बारे में कुछ जानकारी दें, ताकि भविष्य में जो लोग इसे देखेंगे, उन्हें मृत-अंत में नहीं मिलेगा।
Tronix117

3
@ Tronix117 वास्तव में, यह विशेष रूप से इसलिए है कि मैंने इस उत्तर को पढ़ते हुए खुद को इस पृष्ठ पर पाया। मैं न केवल निर्देशिका संरचना के लिए उम्मीद कर रहा था, बल्कि अधिक महत्वपूर्ण रूप से नाम सम्मेलनों (डैश, अंडरस्कोर, कैमलकेस, टाइटलकेस, आदि ...)। दुर्भाग्य से, जवाब में अभी भी यह शामिल नहीं है, और ऐसा लगता bodokaiserहै कि मेरे लिए कूदने के लिए व्यक्तिगत रूप से चीजें भी ले रही हैं और अनुरोध करती हैं कि इस बारे में उनकी राय को उनके उत्तर में जोड़ा जाए (जैसा कि ओपी ने शुरू में उनके सवाल में पूछा था) ( खांसी खांसी )।
कुंडा

97

kebab-caseसभी पैकेज, फ़ोल्डर और फ़ाइल नामों के लिए उपयोग करें ।

क्यों?

आपको कल्पना करना चाहिए कि किसी भी दिन किसी भी फ़ोल्डर या फ़ाइल को अपने स्वयं के पैकेज में निकाला जा सकता है। पैकेज में अपरकेस अक्षर नहीं हो सकते।

नए पैकेज में नाम में बड़े अक्षर नहीं होने चाहिए। https://docs.npmjs.com/files/package.json#name

इसलिए camelCaseकभी भी इस्तेमाल नहीं करना चाहिए। यह छोड़ देता हैsnake_case और kebab-case

kebab-caseआज तक सबसे आम सम्मेलन है। अंडरस्कोर का एकमात्र उपयोग आंतरिक नोड पैकेज के लिए है, और यह शुरुआती दिनों से बस एक सम्मेलन है।


2
आप डॉट भूल गए? socket.io तरह
Roee

1
.2c, रेबेक्स का उपयोग करते हुए किसी भी भाषा या एप्लिकेशन में किसी भी स्क्रिप्ट या ऐप में कबाब-केस से कबाब तक एक सरल स्वचालन कर सकता है - इसे हर समय 🙃
rob2d

63

कोई सम्मेलन नहीं हैं। कुछ तार्किक संरचना हैं।

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

var isHidden = require('./lib/isHidden');

लेकिन दुख की बात है कि मैंने लोअरकेस से भरी एक फाइल बनाई lib/ishidden.js:। इसने मेरे लिए मैक पर काम किया। यह मेरे सह कार्यकर्ता के मैक पर ठीक काम किया। परीक्षण त्रुटियों के बिना चलते हैं। तैनाती के बाद हमें एक बड़ी त्रुटि मिली:

Error: Cannot find module './lib/isHidden'

अरे हां। यह एक linux box है। तो ऊंट निर्देशिका संरचना खतरनाक हो सकती है। यह एक सहयोगी के लिए पर्याप्त है जो विंडोज या मैक पर विकसित हो रहा है।

इसलिए यदि आपको आवश्यकता हो तो अंडरस्कोर (_) या डैश (-) विभाजक का उपयोग करें।


4
+1, इस तथ्य को जोड़ें कि गैर- cs सिस्टम पर git में केस-संवेदी फ़ोल्डर का नाम बदलना वास्तविक परेशानी है।
अधिकतम

4
मैं वास्तव में यहाँ ऊंट के साथ समस्या को नहीं समझता। फ़ाइल को पहली जगह में सही ढंग से नाम देने से समस्या हल नहीं होगी (lib / isHidden.js)?
माइक

अरे माइक, मुद्दा यह है कि कुछ सिस्टम पर तैनाती पर कैमलकेस टूटने वाला है। मैं इस बारे में उलझन में था कि जब मेरी निर्देशिका 404s हो रही थी, तब मैंने मैक से लिनक्स बॉक्स पर "ग्रुपपेज" नाम के पैकेज के साथ तैनाती की थी। मुझे चीजों को ठीक करने के लिए समूह-पृष्ठों में बदलना पड़ा।
टेम्प्रानोवा

3
इससे भी बदतर: एक फ़ाइल नाम का एक कैमलकेस संस्करण बनाएं और एक लापरवाह सहकर्मी उसी निर्देशिका में एक लोअरकेस संस्करण बनाएं। अब एक गैर-केस-संवेदी ओएस में चेक आउट करें, और यह पता लगाने की कोशिश करें कि आपके एप्लिकेशन काम क्यों नहीं कर रहे हैं। और हाँ, यह हुआ।
L0LN1NJ4

मुझे यह उत्तर पसंद है, हालांकि मैं यह बताना चाहता हूं कि डैश (-) में कुछ समस्याएं भी हो सकती हैं। उदाहरण के लिए, Nighwatch टेस्ट फ्रेमवर्क का उपयोग करके मैंने एक पेज ऑब्जेक्ट बनाया, जिसका नाम admin-login.js है। फिर मैंने परीक्षण स्क्रिप्ट का उपयोग करके इसे एक्सेस करने का प्रयास किया const loginPage = browser.page.admin-login()। मुझे त्रुटि मिली ReferenceError: login is not defined। फ़ाइल नाम के लिए अंडरस्कोर (_) का उपयोग करने से समस्या हल हो गई। मैं यह भी कल्पना कर सकता हूं कि कमांड लाइन में डैश कैरेक्टर वाले फाइलनाम का उपयोग करने से कुछ समस्याएं भी हो सकती हैं। इसलिए, मैं कहूंगा कि अंडरस्कोर सामान्य रूप से फ़ाइल नामों के लिए सबसे सुरक्षित विभाजक है।
ड्रेगन निकोलिक

15

' Google जावास्क्रिप्ट स्टाइल गाइड ' पर आधारित

फ़ाइल नाम सभी लोअरकेस होना चाहिए और इसमें अंडरस्कोर (_) या डैश (-) शामिल हो सकते हैं, लेकिन कोई अतिरिक्त विराम चिह्न नहीं। उस कन्वेंशन का अनुसरण करें जो आपकी परियोजना उपयोग करती है। फिल्मनाम का विस्तार .js होना चाहिए।


3

camelCaseजेएस में ज्यादातर लोग इस्तेमाल करते हैं । यदि आप कुछ भी खोलना चाहते हैं, तो मैं आपको इस एक का उपयोग करने का सुझाव देता हूं :-)


कुछ परियोजनाएं, जैसे कि लोकोमोटिव.जे camelCaseनियंत्रक फ़ाइलों के लिए उपयोग कर रही हैं । :-) बस निर्भर करता है। मैं PascalCaseक्लास जैसी फाइलों के लिए इस्तेमाल करता हूं ।
मथिआओ एमियोट

@yitsushi ऊंट (और पास्कल) मामले के नामकरण को लेकर काफी चिंतित है, अगर आप पोर्टेबल मॉड्यूल बनाना चाहते हैं तो ऊंट का मामला निश्चित रूप से एक बुरा विचार लगता है?
गमफ्लक्स

0

Node.js किसी भी फ़ाइल नामकरण सम्मेलनों (को छोड़कर index.js) को लागू नहीं करता है । और सामान्य रूप से जावास्क्रिप्ट भाषा या तो नहीं है। आप यहां दर्जनों धागे पा सकते हैं जो कैमलकेस, हाइफ़न और अंडरस्कोर का सुझाव देते हैं, जिनमें से कोई भी पूरी तरह से अच्छी तरह से काम करता है। ये आप पर निर्भर है। एक चुनें और इसके साथ रहें।


1
यह वास्तव में क्या नोड 'लागू' नहीं है, कृपया इसे पढ़ें: nodejs.org/api/modules.html#modules_folders_as_modules
moka

0

मेरे अनुसार: फ़ाइलों के लिए, कम ऊंट के मामले का उपयोग करें यदि मॉड्यूल .exports एक वस्तु है, तो मेरा मतलब एक सिंगलटन मॉड्यूल है। यह JSON फ़ाइलों के लिए भी लागू होता है क्योंकि वे एक तरह से सिंगल टन भी होते हैं। यदि मॉड्यूल .exports एक निर्माता फ़ंक्शन देता है जहां यह एक वर्ग की तरह काम करता है तो ऊपरी ऊंट मामले का उपयोग करें।

फ़ोल्डरों के लिए संक्षिप्त नाम का उपयोग करें। यदि कई शब्दों की आवश्यकता है, तो इसे "-" द्वारा पूरी तरह से अलग किए गए निचले मामले में रहने दें, ताकि यह सभी प्लेटफार्मों पर लगातार काम करे।

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