Jo: Javascriptdateien zusammenfassen und minifizieren

Hallo,

ich arbeite zur Zeit an meinem ersten größeren Javascriptprojet bei dem ich unterschiedliche Javascriptdateien für den Produktivbetrieb einer mobilen Webapp in einer Datei zusammenfassen und minifizieren möchte.
Dazu kopiere ich bisher die Daten mit DOS (Win 7) zusammen:

copy *.js event.js
Hierbei wird mir am Ende des neu erzeugten Files immer eine Zeichenfolge  "SUB" mit eingetragen, den ich händisch löschen muss, Warum?

Danach nutze ich den Google Closure minifier zum minifizieren:

java -jar compiler.jar --js=event.js --js_output_file=event.min.js

Gibt es da eine schlauere/einfachere Methode?

Danke
Jo

  1. Hi,

    ich arbeite zur Zeit an meinem ersten größeren Javascriptprojet bei dem ich unterschiedliche Javascriptdateien für den Produktivbetrieb einer mobilen Webapp in einer Datei zusammenfassen und minifizieren möchte.
    Dazu kopiere ich bisher die Daten mit DOS (Win 7) zusammen:

    bitte sag sowas nicht - es ist kein DOS! Es ist die Kommandozeile (Konsole) von Windows.

    copy *.js event.js

    Hierbei wird mir am Ende des neu erzeugten Files immer eine Zeichenfolge  "SUB" mit eingetragen, den ich händisch löschen muss, Warum?

    Weil du im "ASCII-Modus" kopierst. Den wählt copy immer dann, wenn mehrere Files zu einem zusammenkopiert werden oder entweder Quelle oder Ziel ein Character Device ist. Erzwinge den Binary-Modus mit dem Schalter /b:

    copy /b *.js event.js

    Achte auch schon beim Erstellen/Bearbeiten drauf, dass alle Quelldateien mit einem Zeilenumbruch enden, sonst kann es passieren, dass beim Zusammenkopieren die letzte Zeile einer Datei mit der ersten Zeile der Folgedatei verbunden wird.

    Übrigens ist das nicht "die Zeichenfolge SUB", sondern das ASCII-Steuerzeichen (EIN Zeichen!) SUB, also Ctrl-Z, das von copy hier als End-Of-File-Marke verwendet wird.

    Ciao,
     Martin

    --
    Schon gewusst, dass Aftershave trotz des Namens eigentlich eher fürs Gesicht gedacht ist?
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Weil du im "ASCII-Modus" kopierst. Den wählt copy immer dann, wenn mehrere Files zu einem zusammenkopiert werden oder entweder Quelle oder Ziel ein Character Device ist. Erzwinge den Binary-Modus mit dem Schalter /b:

      copy /b *.js event.js

      Super, danke funktioniert so prima. Dann kann ich ja sie beiden Befahle in einer .bat zusammenführen und habe danach mein file.
      Gibts da alternativen / Frameworks für solche Zwecke?
      Jo

    2. Achte auch schon beim Erstellen/Bearbeiten drauf, dass alle Quelldateien mit einem Zeilenumbruch enden, sonst kann es passieren, dass beim Zusammenkopieren die letzte Zeile einer Datei mit der ersten Zeile der Folgedatei verbunden wird.

      Das wird sie beim anschließenden Minifizieren ohnehin. Ein Zeilenumbruch ändert also nichts. Wichtig ist, dass der Code jeweils korrekt endet, also Expression Statements z.B. auf ein Semikolon.

      Üblicherweise umschließt man den Code in eine selbstausführende Funktion, dann ist das Semikolon am Ende wichtig:

      (function () {  
        // ...  
      })();
      

      Mathias

      1. Hallo,

        Achte auch schon beim Erstellen/Bearbeiten drauf, dass alle Quelldateien mit einem Zeilenumbruch enden, sonst kann es passieren, dass beim Zusammenkopieren die letzte Zeile einer Datei mit der ersten Zeile der Folgedatei verbunden wird.
        Das wird sie beim anschließenden Minifizieren ohnehin. Ein Zeilenumbruch ändert also nichts.

        grundsätzlich magst du da recht haben; ich dachte aber an tückische Fälle wie einen Kommentar in der letzten Zeile ohne nachfolgenden Zeilenumbruch. Ich habe schon oft Quellcodes gesehen, die mit der Zeile

        // <filename>: EOF

        enden. Da wäre es blöd, wenn der Kommentar -über dessen Sinnhaftigkeit man streiten kann- dann die erste Zeile der nachfolgenden Datei eliminiert.

        Wichtig ist, dass der Code jeweils korrekt endet, also Expression Statements z.B. auf ein Semikolon.

        Stimmt.

        Ciao,
         Martin

        --
        Ja, ja ... E.T. wusste schon, warum er wieder nach Hause wollte.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. java -jar compiler.jar --js=event.js --js_output_file=event.min.js
    Gibt es da eine schlauere/einfachere Methode?

    Jupp, du kannst dem compiler auch mehrere Dateien mit minifizieren über die Kommandozeile übergeben.