Reduzieren Sie Scripts / CSS im Produktionsmodus mit node.js

8

Ich habe eine Web-App, die im Knoten läuft. Alle (Client-) Javascript / CSS-Dateien sind im Moment nicht minimiert, um das Debuggen zu erleichtern.

Wenn ich in Produktion gehe, möchte ich diese Skripte verkleinern. Es wäre schön, etwas wie:

zu haben

node app.js -production

Wie kann ich die verkleinerte Version meiner Skripte bereitstellen, ohne die Skript-Tags in meinen HTML-Dateien zu ändern? Es sollte etwas wie Folgendes sein: Wenn ich in Produktion bin, benutze diese 2 verkleinerten (kombinierten) Skripte, ansonsten benutze alle meine unminifizierten Skripte.

Ist das möglich? Vielleicht denke ich zu kompliziert?

    
Christian 12.02.2013, 20:35
quelle

5 Antworten

15

Vielleicht interessiert dich Piler . Es ist ein Node.js-Modul, das alle JavaScript- (und CSS-) Dateien liefert, die Sie wie gewohnt im Debug-Modus angeben, aber im Produktionsmodus verkettet und minimiert werden.

Als besonderes Feature können Sie CSS-Updates über Socket.io in Echtzeit in Ihrem Browser erzwingen (in PLER "CSS Live Update" genannt), was ganz toll ist: -).

Der Trick besteht darin, dass Sie innerhalb Ihrer Vorlage nur Platzhalter für die Elemente script und link haben, und Piler rendert diese Elemente zur Laufzeit - als einzelne Elemente im Debug-Modus und als dynamisch generiertes einzelnes Element im Produktionsmodus .

Auf diese Weise können Sie verkettete und verkleinerte Versionen Ihrer Assets manuell oder mithilfe eines Build-Tools erstellen. Es ist nur zur Laufzeit vorhanden, aber Sie haben beim Entwickeln und Debuggen immer die getrennten Vollversionen.

    
Golo Roden 12.02.2013, 20:47
quelle
4

Sie könnten zwei separate Speicherorte für Ihre statischen Dateien verwenden

Hier ist ein Expresscode:

%Vor%

und Startknoten mit

%Vor%

Wenn Sie außerdem nicht alle Ihre Dateien duplizieren möchten, können Sie die Tatsache ausnutzen, dass der Express-Static-Router bei der ersten Datei stoppt, und stattdessen Folgendes tun:

%Vor%

Wenn Sie den gleichen Namen für minimized oder nicht verwenden, wird dies jedoch zu Problemen mit dem Browser-Caching führen.

    
Pascal Belloncle 12.02.2013 20:47
quelle
1

Ich möchte meine endgültige Lösung mit euch teilen.

Ich benutze JSHTML für Express ( Linkbeschreibung hier eingeben )

In meiner Hauptdatei verwende ich eine spezielle Route:

%Vor%

Wie Sie sehen können, bekomme ich meine Assets von config.getResourceBundle. Dies ist eine einfache Funktion:

%Vor%

Und schließlich ist hier ein Beispiel für eine Asset-Dateisammlung:

%Vor%

Ich habe 2 Ordner. Entwickler / Hersteller Grunt kopiert die minimierten Dateien in prod / .. und löscht die Dateien von dev / ... Und wenn die Variable NODE_ENV auf production gesetzt ist, werde ich die verkleinerten Versionen meiner Skripte / css versenden. Ich denke, das ist die eleganteste Lösung im Moment.

    
Christian 17.06.2013 06:29
quelle
1

Es gibt Build-Tool-Plugins für Sie, die Ihnen helfen können, dieses Problem zu lösen:

Für Schluck: Ссылка

Für Grunt: Ссылка

    
Dickeylth 01.03.2014 16:08
quelle
0

Ein weiteres Node.js-Modul, das relevant sein könnte, ist connect-cachify .

Es scheint nicht die tatsächliche Minimierung für Sie zu tun, aber es ermöglicht Ihnen, die verkleinerte Version in der Produktion oder alle ursprünglichen Skripte in der Entwicklung zu bedienen, ohne die Vorlagen zu ändern (dank cachify_js und cachify_css ).

Scheint, es ist nicht so funktionsreich wie Piler, aber wahrscheinlich ein bisschen einfacher und sollte alle in der Frage erwähnten Anforderungen erfüllen.

    
Tomty 18.06.2015 15:48
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ tag123realm ___ Die Realm Platform ist eine Datensynchronisationsplattform für mobile Anwendungen. Es enthält die Realm-Datenbank, den Realm-Objektserver und Realm Studio. Sie können Tausende von Codezeilen und Arbeitswochen sparen und fantastische neue Benutzererfahrungen erstellen. ___ antwort43385318 ___

Wenn Sie sicher sind, dass keine anderen Datenbanken gespeichert werden sollen, können Sie auch alle anderen Daten löschen. Sie können dieser Antwort folgen Programmdaten programmgesteuert löschen

    
___ qstntxt ___

Ich möchte die gesamte Datenbank löschen, wenn ein Benutzer die Schaltfläche zum Abmelden drückt und neue Daten lädt, wenn sich ein anderer Benutzer anmeldet. Ich habe viele Lösungen wie

ausprobiert %Vor%

Auch

%Vor%

Aber keiner der Code funktioniert. Vielen Dank im Voraus.

    
___ answer37648877 ___

Wenn Sie %code% aufrufen , müssen Sie sicherstellen, dass alle Realm-Instanzen geschlossen sind, andernfalls wird eine Ausnahme ausgelöst, ohne etwas zu löschen. Durch Aufruf dieser Methode werden alle Realm-Dateien gelöscht, was bedeutet, dass alle Objekte & amp; Schemata sind weg. Das Abfangen aller Ausnahmen ist eine schlechte Vorgehensweise für allgemeine Fälle.

Sie können auch %code% aufrufen in einem Transaktionsblock. Dies erfordert nicht, dass alle Realm-Instanzen geschlossen sind. Es wird nur alle Objekte im Realm löschen, ohne die Schemas zu löschen. Und wieder, fangen Sie nicht alle Ausnahmen ein.

    
___