ফাইল এবং ফোল্ডারগুলির জন্য নোড.জেএস প্রকল্পের নামকরণের সম্মেলন


116

একটি বৃহত নোড.জেএস প্রকল্পে ফাইল এবং ফোল্ডারগুলির নামকরণ কনভেনশনগুলি কী কী?

আমি কি বড় বড়, উট কেস, বা কম স্কোর করা উচিত?

অর্থাৎ। এটি কি বৈধ বলে বিবেচিত হয়?

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

3
উচ্চতর বিষয়গত, আপনার ডিরেক্টরি কাঠামো আপনার নিজস্ব your ব্যক্তিগতভাবে আমি উটকেস করতে পছন্দ করি যেহেতু আমি জেএস
চাদ

@ চ্যাড - নোড.জেজে, requireডিরেক্টরি স্ট্রিংটিকে প্যারামিটার হিসাবে গ্রহণ করে, এ কারণেই এটি সম্পূর্ণ নিজের নয়। অর্থাত। require('../app/controllers/someThings');
Rudiger

3
মডিউল নামকরণের জন্য নোড কোনও পরামর্শ বা মান নির্দিষ্ট করে না, যতক্ষণ না তারা বৈধ ফাইল / ডিরেক্টরি নাম এবং মূল মডিউলটির নাম ওভাররাইড করার চেষ্টা করবেন না । নিজস্ব মডিউলগুলির জন্য, এটি সংক্ষিপ্ত ( fs), একক-শব্দ ( events), আন্ডারস্কর্ড ( child_process) এবং লোয়ারকেস ( querystring) এর মিশ্রণ ব্যবহার করে ।
জোনাথন লোনোস্কি

1
@ রডিগার তাই? আপনি চান স্ট্রিং এবং ডিরেক্টরি কাঠামো আপনি যেটি চান তা নির্দিষ্ট করতে পারেন (আপনার নাম অবশ্যই বৈধ ফাইলের নাম হতে পারে)।
চাদ

অধিবেশন থেকে আমি কী বলতে পারি তা থেকে মোচা ফাইলের নাম যেমন অধিনায়ক-দারুণ-ফাইল.জগুলি যথেষ্ট সাধারণ বলে মনে হয় key এটাই আমি ব্যবহার করতে যাচ্ছি কমপক্ষে!
চার্লস ফেরেণ্টক

উত্তর:


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));

};

এটি নির্ভরতা বিরক্ত না করে ঝরঝরে সমস্ত উত্স কোড ডিকপলিংয়ের অনুমতি দেয়। কদর্য জাভাস্ক্রিপ্ট যুদ্ধ করার জন্য একটি সত্যিই ভাল সমাধান। একটি বাস্তব-বিশ্বের উদাহরণ নিকটবর্তী যা এই সেটআপটি ব্যবহার করে।

আপডেট (ফাইলের নাম):

ফাইলের নামগুলি সম্পর্কে সাধারণভাবে ছোট , ছোট হাতের ফাইলের নাম file যদি আপনার ফাইলটি কেবল দুটি শব্দ দিয়ে বর্ণনা করা যায় তবে বেশিরভাগ জাভাস্ক্রিপ্ট প্রকল্পগুলি ডিলিমেটার হিসাবে আন্ডারস্কোর ব্যবহার করে।

আপডেট (পরিবর্তনশীল):

ভেরিয়েবল সম্পর্কিত, ফাইলের নাম হিসাবে একই "বিধি" প্রয়োগ হয়। প্রোটোটাইপ বা ক্লাসগুলিতে অবশ্য উট কেস ব্যবহার করা উচিত ।

আপডেট (স্টাইলগাইড):


27
আপনার উত্তরটি কী আকর্ষণীয় এবং ভালভাবে সম্পন্ন হয়েছে, এটি বিষয় ছাড়াই বিষয়টির স্রষ্টা বিশেষভাবে ডিরেক্টরি কাঠামোর জন্য নয়, কনভেনশন নামকরণের জন্য বলেছিলেন। আমরা যখন এই বিষয়টিতে পৌঁছে যাই, তখন আমরা ফাইলগুলি ড্যাশ, আন্ডারস্কোর বা উট কেস দিয়ে আরও ভাল নামকরণ করা হয় কিনা তা জানতে আশা করি। আমি এই উত্তরে যোগ করা হয়, upvote হবে।
ট্রোনিক্স 117

3
@ ট্রোনিক্স 117 সমস্যা কী? প্রশ্নটি "ফাইল এবং ফোল্ডারগুলির জন্য প্রকল্পের নামকরণ কনভেনশনগুলির জন্য জিজ্ঞাসা করে?" এবং নামকরণ ফাইলের নামে সীমাবদ্ধ নয় কারণ এতে সম্পূর্ণ পথের নামও অন্তর্ভুক্ত রয়েছে।
bodokaiser

24
অবশ্যই, তবে লেখক স্পষ্টতই জিজ্ঞাসা করেন "আমার কি বড় বড় হওয়া উচিত, উট কেস, না কম স্কোর?" যখন তিনি তার উদাহরণটি লেখেন, তখন স্পষ্টভাবে 'সামথ থিংস' এবং 'কিছু কিছু' কেবলমাত্র এটি বৈধ হিসাবে বিবেচনা করা যেতে পারে তা জানার জন্য রেখেছিলেন। আমি যখন এই বিষয়টিতে গিয়েছিলাম তখন আমি এই নির্দিষ্ট প্রশ্নের উত্তর পেতে এবং সাধারণত ফাইলের নামকরণ হিসাবে কী ব্যবহৃত হয় তা প্রত্যাশা করছিলাম। আমি বলছি না যে আপনার উত্তরটি ভুল, এটি তার উদ্দেশ্যটির জন্য নিখুঁত, তবে আমার মনে অসম্পূর্ণ কারণ তিনি সত্যই মূল প্রশ্নের উত্তর দেন না doesn't
ট্রোনিক্স 117

5
আমার মনে হয় আপনি আমাকে ভুল বুঝেছেন;)। আমি কেবল এমন কিছু সন্ধান করছিলাম যা আমি গৃহীত উত্তরটিতে পাইনি, তবে বিশেষভাবে জিজ্ঞাসা করা হয়েছিল, কোনওরকম বিদ্বেষ ছড়াচ্ছে না, আপনি এই বিষয়ে কিছুটা দূরে যাচ্ছেন। আমি কেবল চেয়েছিলাম যে উত্তরে আপনি সে সম্পর্কে কিছু তথ্য যুক্ত করুন, যাতে ভবিষ্যতে যে লোকেরা এটি সন্ধান করে তারা কোনও শেষের দিকে না যায়।
ট্রোনিক্স 117

3
@ ট্রোনিক্স ১১7 আসলে, এই কারণটি এই কারণেই আমি এই পৃষ্ঠায় নিজেকে খুঁজে পেয়েছি specifically আমি কেবল ডিরেক্টরি কাঠামোর জন্যই আশা করছিলাম না, তবে আরও গুরুত্বপূর্ণভাবে নাম কনভেনশন (ড্যাশ, আন্ডারস্কোর, উট কেস, টাইটেলকেস, ইত্যাদি ...)। দুর্ভাগ্যক্রমে, উত্তরটি এখনও এটি ধারণ করে না, এবং মনে bodokaiserহয় যে এই জিনিসগুলি ব্যক্তিগতভাবে আমার পক্ষে ঝাঁপিয়ে পড়ার জন্য নিচ্ছে এবং অনুরোধ করছেন যে এই বিষয়ে তাঁর মতামত তার উত্তরে যুক্ত করা উচিত (যেমন ওপি তাদের প্রশ্নে প্রথমে জিজ্ঞাসা করেছিল) ( কাশি কাশি )।
সুইভেল

97

kebab-caseসমস্ত প্যাকেজ, ফোল্ডার এবং ফাইলের নামের জন্য ব্যবহার করুন ।

কেন?

আপনার ধারণা করা উচিত যে কোনও ফোল্ডার বা ফাইল কোনও দিন তার নিজস্ব প্যাকেজে তোলা হতে পারে। প্যাকেজগুলিতে বড় হাতের অক্ষর থাকতে পারে না।

নতুন প্যাকেজগুলির নামে বড় হাতের অক্ষর থাকা উচিত নয়। https://docs.npmjs.com/files/package.json#name

অতএব, camelCaseকখনও ব্যবহার করা উচিত নয়। এই পাতা snake_caseএবং kebab-case

kebab-caseএটি এখন পর্যন্ত সবচেয়ে সাধারণ সম্মেলন convention আন্ডারস্কোরগুলির একমাত্র ব্যবহার হ'ল অভ্যন্তরীণ নোড প্যাকেজগুলির জন্য এবং এটি কেবল প্রথম দিনগুলির একটি সম্মেলন।


2
আপনি ডট ভুলে গেছেন? সকেট.ওয়ের মতো
রোয়

1
.২ সি, রেগেক্স ব্যবহার করে যে কোনও ভাষায় স্ক্রিপ্ট বা অ্যাপ্লিকেশনটিতে কাবাব-কেস থেকে কাবাব কেস পর্যন্ত একটি সাধারণ অটোমেশন করতে পারে - এটি
সারাক্ষণ করুন

63

কোন সম্মেলন নেই। কিছু যৌক্তিক কাঠামো আছে।

আমি কেবলমাত্র এটিই বলতে পারি: কখনই উটকেস ফাইল এবং ডিরেক্টরি নাম ব্যবহার করবেন না। কেন? এটি কাজ করে তবে ম্যাক এবং উইন্ডোজে কিছু ক্রিয়া এবং কিছু ক্রিয়াকলাপের মধ্যে আলাদা নয়। আমি এই সমস্যাটি পূরণ করেছি, একবারও নয়। আমি এই জাতীয় একটি ফাইল চাই:

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

কিন্তু দুঃখিতভাবে আমি ছোট হাতের পূর্ণ সহ একটি ফাইল তৈরি করা হয়েছে: lib/ishidden.js। এটি ম্যাকের জন্য আমার পক্ষে কাজ করেছিল। এটি আমার সহকর্মীর ম্যাকের জন্য দুর্দান্ত কাজ করেছে। টেস্টগুলি ত্রুটি ছাড়াই চলে। মোতায়েনের পরে আমরা একটি বিশাল ত্রুটি পেয়েছি:

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

ও আচ্ছা. এটি একটি লিনাক্স বাক্স। সুতরাং উটকেস ডিরেক্টরি কাঠামো বিপজ্জনক হতে পারে। উইন্ডোজ বা ম্যাকের বিকাশকারী কোনও সহকর্মীর পক্ষে এটি যথেষ্ট।

সুতরাং আপনার প্রয়োজন হলে আন্ডারস্কোর (_) বা ড্যাশ (-) বিভাজক ব্যবহার করুন।


4
+1, এটিকে যুক্ত করুন যে নন-সিএস সিস্টেমে গিটে কেস-সংবেদনশীল ফোল্ডারগুলির নাম পরিবর্তন করা একটি আসল ঝামেলা।
সর্বাধিক

4
আমি এখানে উটকেস নিয়ে সমস্যাটি সত্যিই বুঝতে পারি না। প্রথম স্থানে (lib / isHmitted.js) সঠিকভাবে ফাইলটির নাম রেখে সমস্যার সমাধান হবে না?
মাইক

আরে মাইক, মোদ্দা কথাটি হ'ল উটকেস কিছু সিস্টেমে মোতায়েনের উপর ভাঙ্গতে চলেছে। আমি যখন ম্যাক থেকে "গ্রুপপেজ" নামে একটি প্যাকেজযুক্ত একটি লিনাক্স বাক্সে স্থাপন করেছিলাম তখন কেন আমার ডিরেক্টরিগুলি 404s পাচ্ছিল সে সম্পর্কে আমি বিভ্রান্ত হয়ে পড়েছিলাম। জিনিসগুলি ঠিক করতে আমাকে গ্রুপ-পৃষ্ঠায় পরিবর্তন করতে হয়েছিল।
টেমপ্রানোভা

3
আরও খারাপ: কোনও ফাইলের নামের একটি ক্যামেলকেস সংস্করণ তৈরি করুন এবং অসাবধান সহকর্মীকে একই ডিরেক্টরিতে একটি ছোট হাতের সংস্করণ তৈরি করুন। এখন অ-কেস-সংবেদনশীল ওএস-এ পরীক্ষা করে দেখুন এবং কেন আপনার অ্যাপ্লিকেশনটি কাজ করছে না তা বোঝার চেষ্টা করুন। এবং হ্যাঁ, এটি ঘটেছিল।
L0LN1NJ4

আমি এই উত্তরটি পছন্দ করি, তবে আমি এটি উল্লেখ করতে চাই যে ড্যাশ (-) এরও কিছু সমস্যা হতে পারে। উদাহরণস্বরূপ, নাইঘাচ টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে আমি অ্যাডমিন-লগইন.জেএস নামে একটি পৃষ্ঠা অবজেক্ট তৈরি করেছি। তারপরে আমি পরীক্ষার স্ক্রিপ্টটি ব্যবহার করে এটি অ্যাক্সেস করার চেষ্টা করেছি const loginPage = browser.page.admin-login()। আমি ত্রুটি পেয়েছি ReferenceError: login is not defined। ফাইল নামের জন্য আন্ডারস্কোর (_) ব্যবহার করা সমস্যার সমাধান করে। আমি এটাও ভাবতে পারি যে কমান্ড লাইনে ড্যাশ অক্ষরযুক্ত ফাইলের নাম ব্যবহার করাও কিছু সমস্যা তৈরি করতে পারে। অতএব, আমি বলব যে সাধারণভাবে ফাইলের নামগুলির জন্য আন্ডারস্কোরটি সবচেয়ে নিরাপদ বিভাজক।
ড্রাগন নিকলিক

15

' গুগল জাভাস্ক্রিপ্ট স্টাইল গাইড ' এর উপর ভিত্তি করে

ফাইলের নামগুলি অবশ্যই সমস্ত ছোট হাতের হতে হবে এবং এতে আন্ডারস্কোর (_) বা ড্যাশগুলি (-) অন্তর্ভুক্ত থাকতে পারে তবে কোনও অতিরিক্ত বিরামচিহ্ন নেই। আপনার প্রকল্পটি যে কনভেনশন ব্যবহার করে তা অনুসরণ করুন। ফাইলনামগুলির এক্সটেনশন অবশ্যই .js হওয়া উচিত।


3

বেশিরভাগ লোক camelCaseজেএস ব্যবহার করেন। আপনি যদি কিছু ওপেন-সোর্স করতে চান তবে আমি আপনাকে এটি ব্যবহার করার পরামর্শ দিচ্ছি :-)


কিছু প্রকল্প, যেমন লোকোমোটিভ.জেগুলি camelCaseনিয়ন্ত্রণকারী ফাইলগুলির জন্য ব্যবহার করছে। :-) ঠিক নির্ভর করে। PascalCaseক্লাস-এর মতো ফাইলগুলির জন্য আমি ব্যবহার করার প্রবণতা রাখি ।
ম্যাথিউ এমিয়ট

@ ইউিতসী মনে হয় উটের (এবং প্যাসকেল) মামলার নামকরণ নিয়ে যথেষ্ট উদ্বেগ প্রকাশ করেছে, আপনি যদি পোর্টেবল মডিউল তৈরি করতে চান তবে উটের কেসটি অবশ্যই খারাপ ধারণা বলে মনে হচ্ছে?
গুমাফ্লাক্স

0

নোড.জেএস কোনও ফাইল নামকরণ কনভেনশন প্রয়োগ করে না (বাদে index.js)। এবং জাভাস্ক্রিপ্ট ভাষা সাধারণত হয় না। আপনি এখানে কয়েক ডজন থ্রেড খুঁজে পেতে পারেন যা উটকেস, হাইফেন এবং আন্ডারস্কোর প্রস্তাব দেয়, যার মধ্যে কোনওটি পুরোপুরি ভালভাবে কাজ করে। তাই এটা আপনার উপর নির্ভর করে. একটি চয়ন করুন এবং এটি দিয়ে লাঠি।


1
এটি নোড 'প্রয়োগ করে' আসলে তা নয়, দয়া করে এটি পড়ুন: নোডজেএস.আর.জি.পি.আই
মোকা

0

আমার মতে: ফাইলগুলির জন্য, লোয়ার উট কেসটি ব্যবহার করুন যদি মডিউল.এক্সপোর্টগুলি কোনও বস্তু হিসাবে থাকে তবে আমি বলতে চাইছি সিঙ্গেলটন মডিউল। এটি JSON ফাইলগুলিতেও প্রযোজ্য কারণ সেগুলিও একরকম একক টন। মডিউল.এক্সপোর্টগুলি যদি কোনও শ্রেণীর মতো কাজ করে এমন কোনও কনস্ট্রাক্টর ফাংশন প্রদান করে তবে উচ্চতর উটের কেস ব্যবহার করুন।

ফোল্ডারগুলির জন্য সংক্ষিপ্ত নাম ব্যবহার করুন। যদি একাধিক শব্দের দরকার হয় তবে এটি "-" দ্বারা সম্পূর্ণ লোয়ার কেসকে পৃথক করা হোক যাতে এটি সমস্ত প্ল্যাটফর্মগুলিতে ধারাবাহিকভাবে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.