Ist es möglich, Vue.js Templates zu statischen HTML- und CSS-Dateien zu kompilieren?

8

Vor kurzem habe ich mich in Vue.js einzelne Dateikomponenten verliebt. Es ist so viel schöner, die Vorlagen und Stile einer Komponente nahe beieinander zu haben, und ich stelle fest, dass ich jetzt viel weniger Fehler schreibe, da es so einfach ist, Teile einer Seite zu komponieren und an mehreren Stellen zu verwenden.

Ich frage mich, ob ich diese Ein-Datei-Komponentenstruktur zum Generieren statischer HTML-Seiten ohne Vue erweitern könnte.

Beispiel: Ich möchte eine Seite mit einem Hauptdivider "Inhalt" haben, der eine Kopfzeile, einen Abschnitt und eine Fußzeile enthält. Mit Vue.js kann ich "header" -, "section" - und "footer" -Komponenten erstellen und JavaScript verwenden, um sie nach dem Laden der Seite instanziieren zu lassen. Da jeder Teil der Seite in einer eigenen Komponente ist, gibt es keine Möglichkeit, dass CSS in einer Komponente eine andere beeinflusst, und ich habe einen viel saubereren Baum von Dateien zum Bearbeiten.

Dies scheint jedoch ein wenig verschwenderisch zu sein, da diese Komponenten nicht wirklich interaktiv sind: Ich verwende nicht v-model oder v-bind oder v-on , ich benutze nur Vue.js, weil es mich trennen kann Stücke von Seiten heraus. Es bedeutet auch, dass meine Seite überhaupt nicht funktioniert, wenn JavaScript deaktiviert ist, da jedes einzelne Element (speichert das Hauptinhaltsdiv) davon abhängt, dass Vue verfügbar ist.

Gibt es also eine Möglichkeit, .vue-Dateien zu kompilieren, und nicht eine Seite, die diese Komponenten zur Laufzeit mit Vue.js lädt, sondern HTML- und CSS-Dateien, die ohne JavaScript rendern, voneinander trennt?

Idealerweise hätte ich eine Komponente 'greeting.vue':

%Vor%

Wird auf einer Seite verwendet:

%Vor%

Und diese würden in zwei Dateien kompilieren: eine HTML-Seite mit der kompilierten und vorgerenderten Vorlage und eine CSS-Datei, die die Stile für alle Komponenten enthält. Ich könnte dann das generierte Stylesheet in die Seite einfügen und alle Komponenten würden gestylt.

Ich habe vue-loader und vueify , aber ich kann nicht verstehen, was sie tun, da ich Webpack oder Browserify nicht genug benutzt habe.

Ist das, was ich versuche, möglich?

    
Ben S 17.03.2017, 12:18
quelle

3 Antworten

3

Was Sie suchen, ist Server Side Rendering. Ich würde Ihnen empfehlen, sich Nuxt.js anzuschauen.

Aus den VueJS-Dokumenten:

  

Korrekte Konfiguration aller diskutierten Aspekte eines produktionsfertigen   Server-gerenderte App kann eine entmutigende Aufgabe sein. Zum Glück gibt es ein   ausgezeichnetes Gemeinschaftsprojekt, das all dies erleichtern soll:   Nuxt.js Nuxt.js ist ein übergeordnetes Framework, das auf dem Vue basiert   Ökosystem, das eine extrem schlanke Entwicklung bietet   Erfahrung beim Schreiben von universellen Vue-Anwendungen. Besser noch, du kannst   verwenden Sie es sogar als statischen Site Generator (mit Seiten, die als   Single-File Vue-Komponenten)! Wir empfehlen sehr, es auszuprobieren.

Es ist super einfach, es zu starten . Wenn Sie vue-cli verwenden:

%Vor%

Es kommt mit allem, was Sie normalerweise brauchen (Vuex, Router, ..). Denken Sie daran, dass es eine Ordnerstruktur erzwingt, der Sie folgen müssen.

Hier ist die Liste der Befehle, die im Starter enthalten sind.

%Vor%

Sie werden wahrscheinlich meistens in generate iterested sein, so wie es

ist
  

Erstellen Sie die Anwendung und generieren Sie jede Route als HTML-Datei (used   für statische Hosting).

Es ist auch eine coole Sache zu beachten, dass das Projekt (zum Zeitpunkt der Erstellung dieses Artikels) aktiv entwickelt ist und wir können uns auf weitere tolle Features freuen!

    
Sicky 20.03.2017, 19:15
quelle
2

Aus dem offiziellen vuejs-Führer:

  

Wenn Sie Webpack verwenden, können Sie das Prerendering ganz einfach mit dem prerender-spa-plugin hinzufügen. Es wurde ausgiebig mit Vue-Apps getestet - und der Entwickler ist sogar ein Mitglied des Vue-Kernteams.

    
Rashad Saleh 17.03.2017 12:28
quelle
1

Ich würde sagen, dass Sie dies nicht tun können, weil Vue ein virtuelles DOM verwendet, es nicht Vorlagen zu HTML kompiliert, sondern zu JavaScript render functions , das notwendig ist, um das DOM beim Aktualisieren von Daten effizient zu patchen .

Ich bin mir sicher, dass man mit etwas node magic etwas tun kann, um Dateien zu parsen und auszugeben, aber das wäre ein ziemlich großes Unterfangen für etwas, das nur einen minimalen Effekt hätte. p>     

craig_h 17.03.2017 12:26
quelle

Tags und Links