Namenskonventionen für Node.js-Projekte für Dateien und Ordner


115

Was sind die Namenskonventionen für Dateien und Ordner in einem großen Node.js-Projekt?

Soll ich groß schreiben, camelCase oder unterschätzen?

Dh. Wird dies als gültig angesehen?

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

3
Sehr subjektiv, Ihre Verzeichnisstruktur ist Ihre eigene. Persönlich mag ich camelCase, da das ist, was ich in JS
Chad

@Chad - In Node.js wird requiredie Verzeichniszeichenfolge als Parameter verwendet, weshalb sie nicht ganz Ihre eigene ist. dh. require('../app/controllers/someThings');
Rüdiger

3
Der Knoten gibt keine Vorschläge oder Standards für die Benennung von Modulen an, solange diese gültige Datei- / Verzeichnisnamen sind und nicht versucht wird, die Namen der Kernmodule zu überschreiben . Für seine eigenen Module wird eine Mischung aus abgekürzt ( fs), Einzelwort ( events), Unterstrich ( child_process) und Kleinbuchstaben ( querystring) verwendet.
Jonathan Lonowski

1
@ Rudiger Also? Sie können angeben, welche Zeichenfolge Sie möchten und welche Verzeichnisstruktur Sie haben möchten (vorausgesetzt, Ihre Namen sind natürlich gültige Dateinamen).
Chad

Nach allem, was ich aus dem Stöbern in den wichtigsten Projekten wie Mokka- Dateinamen wie "Captain-awesome-file.js" ersehen kann, scheinen sie häufig genug zu sein. Das werde ich zumindest benutzen!
Charles Ferentchak

Antworten:


153

Nach einigen Jahren mit Node kann ich sagen, dass es keine Konventionen für die Verzeichnis- / Dateistruktur gibt. Die meisten (professionellen) Express-Anwendungen verwenden jedoch ein Setup wie:

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

Ein Beispiel, das dieses Setup verwendet, ist nodejs-Starter .

Ich persönlich habe dieses Setup geändert in:

/
  /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

Meiner Meinung nach passt Letzteres besser zur Unix-ähnlichen Verzeichnisstruktur (während Ersteres dies ein wenig durcheinander bringt).

Ich mag dieses Muster auch, um Dateien zu trennen:

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 / static / index.js

var express = require('express');

module.exports = function(app) {

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

};

Dies ermöglicht eine saubere Entkopplung des gesamten Quellcodes, ohne sich um Abhängigkeiten kümmern zu müssen. Eine wirklich gute Lösung, um böses Javascript zu bekämpfen. Ein reales Beispiel ist in der Nähe , das dieses Setup verwendet.

Update (Dateinamen):

In Bezug auf Dateinamen am häufigsten sind kurz , Klein Kleindateinamen.Wenn Ihre Datei nur mit zwei Wörtern beschrieben werden kann, verwenden die meisten JavaScript-Projekte einen Unterstrich als Trennzeichen.

Update (Variablen):

In Bezug auf Variablen gelten die gleichen "Regeln" wie für Dateinamen. Prototypen oder Klassen sollten jedoch camelCase verwenden .

Update (Styleguides):


26
Wie interessant und gut gemacht Ihre Antwort ist, es ist kein Thema, der Themenersteller hat speziell nach Namenskonventionen gefragt, nicht nach Verzeichnisstrukturen. Wenn wir zu diesem Thema kommen, erwarten wir, dass wir wissen, ob Dateien besser mit Bindestrichen, Unterstrichen oder camelCase benannt sind. Ich werde zustimmen, wenn dies zu dieser Antwort hinzugefügt wird.
Tronix117

3
@ Tronix117 was ist das Problem? Die Frage fragt nach "Projektnamenskonventionen für Dateien und Ordner?" Die Benennung ist nicht auf den Dateinamen beschränkt, sondern enthält auch den vollständigen Pfadnamen.
Bodokaiser

23
Natürlich, aber der Autor fragt ausdrücklich: "Soll ich groß schreiben, camelCase oder unterschätzen?". Wenn er sein Beispiel schreibt, setzt er explizit 'someThings' und 'some-things', nur um zu wissen, ob es als gültig angesehen werden kann. Als ich zu diesem Thema ging, hatte ich erwartet, die Antwort auf diese spezielle Frage zu haben und zu wissen, was normalerweise als Dateinamen verwendet wird. Ich sage nicht, dass Ihre Antwort falsch ist, sie ist perfekt für ihren Zweck, aber in meinen Augen unvollständig, weil er die Hauptfrage nicht wirklich beantwortet.
Tronix117

5
Ich denke du hast mich falsch verstanden ;). Ich habe nur nach etwas gesucht, das ich in der akzeptierten Antwort nicht gefunden habe, wurde aber speziell gefragt, da ich in keiner Weise Hass verbreite. Sie gehen in dieser Frage ein bisschen weit. Ich wollte nur, dass Sie in der Antwort einige Informationen dazu hinzufügen, damit Menschen, die in Zukunft danach suchen, nicht in eine Sackgasse geraten.
Tronix117

2
@ Tronix117 Eigentlich war dies genau der Grund, warum ich mich auf dieser Seite befand und diese Antwort las. Ich hatte nicht nur auf die Verzeichnisstruktur gehofft, sondern vor allem auf Namenskonventionen (Bindestriche, Unterstriche, camelCase, TitleCase usw.). Leider ist die Antwort immer noch enthält sie nicht, und es scheint , bodokaiserist die Dinge zu persönlich für mich nehmen zu springen und Wunsch , dass seine Meinung , dies zu seiner Antwort hinzugefügt werden , in Bezug auf ((wie der OP zunächst in ihrer Frage gestellt) Husten Husten ).
Wirbel

97

Verwenden kebab-case für alle Paket-, Ordner- und Dateinamen.

Warum?

Sie sollten sich vorstellen, dass ein Ordner oder eine Datei eines Tages in ein eigenes Paket extrahiert werden könnte. Pakete dürfen keine Großbuchstaben enthalten.

Neue Pakete dürfen keine Großbuchstaben im Namen enthalten. https://docs.npmjs.com/files/package.json#name

Daher camelCasesollte niemals verwendet werden. Dies lässt snake_caseund kebab-case.

kebab-caseist heute bei weitem die häufigste Konvention. Unterstriche werden nur für interne Knotenpakete verwendet, und dies ist einfach eine Konvention von Anfang an.


2
Hast du Punkt vergessen? wie socket.io
Roee

1
.2c, könnte eine einfache Automatisierung von Kebab-Case zu KebabCase in jedem Skript oder jeder App in jeder Sprache mit Regex durchführen - mach es die ganze Zeit 🙃
rob2d

63

Es gibt keine Konventionen. Es gibt einige logische Strukturen.

Das einzige, was ich sagen kann: Verwenden Sie niemals camelCase-Datei- und Verzeichnisnamen. Warum? Es funktioniert, aber unter Mac und Windows gibt es keinen Unterschied zwischen someAction und some action. Ich bin diesem Problem begegnet und nicht ein einziges Mal. Ich benötige eine Datei wie diese:

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

Leider habe ich eine Datei mit Kleinbuchstaben erstellt : lib/ishidden.js. Es hat bei mir auf dem Mac funktioniert. Auf dem Mac meines Kollegen hat es gut funktioniert. Tests laufen ohne Fehler. Nach der Bereitstellung haben wir einen großen Fehler erhalten:

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

Oh ja. Es ist eine Linux-Box. Die Verzeichnisstruktur von camelCase kann daher gefährlich sein. Es ist genug für einen Kollegen, der unter Windows oder Mac entwickelt.

Verwenden Sie daher bei Bedarf einen Unterstrich (_) oder einen Bindestrich (-).


4
+1, fügen Sie die Tatsache hinzu, dass das Umbenennen von Ordnern mit Groß- und Kleinschreibung in Git auf einem Nicht-CS-System ein echtes Problem ist.
Max

4
Ich verstehe das Problem mit camelCase hier nicht wirklich. Wäre das Problem nicht gelöst, wenn die Datei zuerst richtig benannt würde (lib / isHidden.js)?
Mike

Hey Mike, der Punkt ist, dass camelCase bei der Bereitstellung auf einigen Systemen nicht mehr funktioniert. Ich war verwirrt darüber, warum meine Verzeichnisse alle 404s erhielten, als ich sie von Mac auf einer Linux-Box mit einem Paket namens "groupPages" bereitstellte. Ich musste zu Gruppenseiten wechseln, um Dinge zu reparieren.
Tempranova

3
Schlimmer noch: Erstellen Sie eine Camelcase-Version eines Dateinamens und lassen Sie einen sorglosen Kollegen eine Kleinbuchstabenversion im selben Verzeichnis erstellen. Führen Sie jetzt einen Check-out in einem Betriebssystem durch, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, und versuchen Sie herauszufinden, warum zum Teufel Ihre Anwendung nicht funktioniert. Und ja, das ist passiert.
L0LN1NJ4

Ich mag diese Antwort, möchte jedoch darauf hinweisen, dass der Bindestrich (-) auch einige Probleme haben kann. Mit dem Nighwatch-Testframework habe ich beispielsweise ein Seitenobjekt mit dem Namen admin-login.js erstellt. Dann habe ich versucht, über das Testskript mit darauf zuzugreifen const loginPage = browser.page.admin-login(). Ich habe einen Fehler bekommen ReferenceError: login is not defined. Die Verwendung des Unterstrichs (_) für den Dateinamen löste das Problem. Ich kann mir auch vorstellen, dass die Verwendung von Dateinamen mit Bindestrich in der Befehlszeile ebenfalls zu Problemen führen kann. Daher würde ich sagen, dass der Unterstrich das sicherste Trennzeichen für Dateinamen im Allgemeinen ist.
Dragan Nikolic

15

Basierend auf ' Google JavaScript Style Guide '

Dateinamen müssen in Kleinbuchstaben geschrieben sein und dürfen Unterstriche (_) oder Bindestriche (-) enthalten, jedoch keine zusätzliche Interpunktion. Befolgen Sie die Konvention, die Ihr Projekt verwendet. Die Dateinamenerweiterung muss .js sein.


3

Die meisten Leute verwenden camelCasein JS. Wenn Sie etwas als Open Source veröffentlichen möchten, empfehle ich Ihnen, dieses zu verwenden :-)


Einige Projekte, wie z. B. Locomotive.js, werden camelCasefür Controller-Dateien verwendet. :-) Kommt nur drauf an. Ich neige dazu, PascalCasefür klassenähnliche Dateien zu verwenden.
Mathieu Amiot

@yitsushi scheint ein ziemliches Problem mit der Benennung von Kamel- (und Pascal-) Fällen zu sein. Wenn Sie tragbare Module erstellen möchten, scheint Kamel-Fall sicherlich eine schlechte Idee zu sein?
Gumaflux

0

Node.js erzwingt keine Dateinamenskonventionen (außer index.js). Und die Javascript-Sprache im Allgemeinen auch nicht. Hier finden Sie Dutzende von Threads, die auf camelCase, Bindestriche und Unterstriche hinweisen, von denen jeder perfekt funktioniert. Es liegt also an Ihnen. Wählen Sie eine und bleiben Sie dabei.


1
Es ist nicht wirklich das, was der Knoten "erzwingt", bitte lesen Sie dies: nodejs.org/api/modules.html#modules_folders_as_modules
moka

0

Meiner Meinung nach: Verwenden Sie für Dateien Kleinbuchstaben, wenn module.exports ein Objekt ist, ich meine ein Singleton-Modul. Dies gilt auch für JSON-Dateien, da sie ebenfalls in einer Tonne vorliegen. Verwenden Sie Großbuchstaben, wenn module.exports eine Konstruktorfunktion zurückgibt, die sich wie eine Klasse verhält.

Verwenden Sie für Ordner Kurznamen. Wenn mehrere Wörter erforderlich sind, lassen Sie es vollständig durch "-" getrennt, damit es auf allen Plattformen konsistent funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.