2017-07-14 2 views
1

Ich schreibe eine Anwendung mit einem Node.js-Back-End und einem einseitigen Web-App-Front-End.Organisieren einer Client & Server SPA/Node.js-Anwendung

Ich behalte die Client- und Serverlogik im selben Projekt für Einfachheit und Geschwindigkeit der Entwicklung.

Ich überlege mir, wie man die Artefakte am besten organisiert.

Der Node.js-Teil ist unkompliziert, da er nicht durch eine Reihe von Vorprozessoren (Transpilation, Minification, Verkettung usw.) gehen muss.

Das Front-End muss nach den oben genannten transformiert werden, und ich denke, in einem Ordner dist platziert.

Die aktuelle Hierarchie der Dateien ist wie folgt:

my-app 
- src 
    - client 
    - server 

Soll ich die dist-Ordner für die Client-Artefakte unter src/Client setzen?

Hat jemand das versucht und Probleme mit diesem Ansatz gefunden?

Ich verwende Heroku (ein Bereitstellungssystem, das Git verwendet).

Das Commit der gebauten Artefakte für den Kunden fühlt sich falsch an, aber wenn ich es bereitstellen möchte, indem ich zu Heroku dränge, denke ich, dass ich sie begehen muss. Ist das richtig?

+1

Verwenden Sie eine Templating-Sprache? Das beeinflusst, welche Art von Layout Sie berücksichtigen sollten. Und ja, Sie sollten entweder den "dist" -Ordner festschreiben oder eine Aufgabe mit dem 'npm postinstall'-Hook erzeugen lassen. –

+0

Client ist react/redux. Ist das, was du fragst? – Ben

+1

Ja, das macht es klarer. Ich würde persönlich das 'dist' an die Wurzel setzen, d. H.' My-app/dist', das scheint die Konvention zu sein, besonders da 'dist' nicht _src' ist. –

Antwort

1

Diese Frage, wie es ist, lädt opinionated Antworten, werde ich sagen, dies ist so beginnen keineswegs die nur Weg zu gehen, aber meiner Meinung nach, ist es am einfachsten, mit zu arbeiten und macht das Beste Sinn.

Die Produktion Client-Code, nach Vorverarbeitung, sollte in my-app/dist oder my-app/dst befinden, die entweder distribution oder destination bedeuten könnte, je nachdem wie man es betrachtet. Wie auch immer, meine Empfehlung ist commit diesen Ordner, wie es Ihnen eine Menge Ärger Debugging remote spart.

Zum Beispiel, wenn Ihr Code lokal funktioniert, aber nicht remote, mit etwas wie der postinstall Hook, um Ihre dist Ordner zu erstellen, fügt einen weiteren Verdächtigen zu überprüfen, wenn Sie versuchen zu ermitteln, was das Problem mit Ihrem Programm ist.

Ein weiterer Vorteil des Ordners dist ist, dass Sie alle Pakete, die Sie für Ihren Build-Prozess verwenden, als devDependencies statt dependencies angeben können. Dies ist eine riesige plus, und macht die Bereitstellung viel schneller, sowie weniger Speicherverbrauch auf Ihrem Heroku-Prozess.

aber sagen, dass ich noch empfehlen, eine automatisierte watch Aufgabe (wie Sie wahrscheinlich schon planen zu tun) mit Ihrem dist Ordner für einfache Entwicklung zu bauen, auch wenn Sie sich entscheiden, Sie wollen nicht, dass die gleiche Build-Prozess verwenden, remote und entscheiden Sie sich stattdessen dafür, das Verzeichnis dist zu übergeben. Sie könnten das als einen benutzerdefinierten npm Befehl hinzufügen, z.npm run build und rufen Sie Ihre gulp Aufgabe auf.

Eine letzte Sache. Für diejenigen von Ihnen, die Templating-Sprachen wie pug oder dust oder ejs anstelle eines Frameworks wie react oder angular verwenden, empfehle ich zu bestimmen, ob Sie eine Ihrer Vorlagen ausführen können, um statische HTML-Dateien zu erstellen, die in der Produktion geliefert werden.

Wenn nicht, sollten Sie zumindest Ihre Vorlagen kompilieren (nicht zu verwechseln mit der Ausführung), indem Sie den Empfehlungen Ihrer jeweiligen Vorlagensprache folgen. In der Regel empfehlen sie, mithilfe des Befehlszeilendienstprogramms die kompilierten Vorlagen zu generieren, damit sie nicht jedes Mal kompiliert werden müssen, wenn sie in der Produktion aufgerufen werden. Dadurch reagiert Ihr node.js-Server schneller auf Anfragen, da mehr Speicher zum Zwischenspeichern der kompilierten Vorlagen benötigt wird.

1

Wenn Sie diese Route planen, würde ich nodejs app.js/index.js bearbeiten, um eine statische Datei bereitzustellen und das Verzeichnis auf dist/ zu verweisen. Sie müssten auch express mitteilen, dass alle Nicht-API-Anfragen an das Frontend weitergeleitet werden.