Ole: Bei "svn update" JS-Minifizierung anstoßen

Hallo,

ich suche nach einem script/Tool/Programm, dass ich beim "svn update" dazu nutzen kann die übertragenen JS-Dateien zu minifizieren.
Alternativ nehm ich auch etwas entsprechendes, dass bei einem "svn commit" eine zweite minifizierte Datei neben der ursprünglichen erzeugen kann (hier würde auf TortoiseSVN bzw. dessen Aktionsskript-Möglichkeit zurückgegriffen werden).

Ich finde immer nur Scripte die mit Node.js laufen (z.B. UglifyJS), aber nichts, was man z.B. über eine batch-Datei aufrufen kann.

Habt ihr da einen Tipp für mich?

Bonus wäre, wenn ich auch einen Trigger (welcher Art auch immer) reagieren könnte und damit dann Dateien auch von der Minifizierung ausschließen könnte.

Danke & Gruß
Ole

  1. Olá oller Ole,

    ich antworte mal nicht ganz auf deine Frage.
    In meiner Entwicklungsumgebung habe ich mir ein Script geschrieben, dass sucht in den entsprechenden js btw. css Verzeichnissen nach css Dateien. Werden diese gefunden wird geguckt, was die letzte Aktualisierung ist. Diese wird mit der minifizierten Datei verglichen. Ist diese Datei veraltet wird die Minifizierung in Gang gesetzt.
    Diese Prüfung passiert per default bei jedem Seiten Request (wohlgemerkt nur in der Entwicklungsumgebung). Für kleine Projekte war das stets sehr komfortabel, da die gewünschten optimierten Scripte automatisch erstellt wurden.

    Ich hoffe ich konnte helfen.

    Gruß
    entminifizierter
    T - R e x

    1. Aloha,

      In meiner Entwicklungsumgebung habe ich mir ein Script geschrieben, dass sucht in den entsprechenden js btw. css Verzeichnissen nach css Dateien. Werden diese gefunden wird geguckt, was die letzte Aktualisierung ist.

      Bis hierher identisch mit dem was SVN macht.

      Diese wird mit der minifizierten Datei verglichen. Ist diese Datei veraltet wird die Minifizierung in Gang gesetzt.

      Womit minifizierst du?

      Diese Prüfung passiert per default bei jedem Seiten Request (wohlgemerkt nur in der Entwicklungsumgebung). Für kleine Projekte war das stets sehr komfortabel, da die gewünschten optimierten Scripte automatisch erstellt wurden.

      Wenn ich das recht verstehe läuft das über den Webserver? Ist leider bei mir nicht praktikabel.

      Ich hoffe ich konnte helfen.

      Ein bisschen :)

      Ich habe leider nur die zwei genannten Ansatzpunkte, alles andere würde zu viel Aufwand bedeuten. Auf der einen Seite die Anpassung der IT-Infrastruktur, oder auf der anderen Seite die Konfiguration von 20+ Rechnern mit sehr unterschiedlichen Entwicklungsumgebungen und -werkzeugen.
      Letzteres hätte ich zwar auch beim "svn commit", hier ist aber gewährleistet, dass alle beteiligten Personen mit der gleichen Software (SVN) arbeiten. Es würde also reichen ein Skript für alle zu schreiben und zu verteilen bzw. zentral zur Verfügung zu stellen.

      Danke & Gruß
      Ole

  2. Moin Moin!

    Hallo,

    ich suche nach einem script/Tool/Programm, dass ich beim "svn update" dazu nutzen kann die übertragenen JS-Dateien zu minifizieren.

    Wozu willst Du Dir das Leben schwer machen? Wenn Du beim Update die Dateien minimierst, ist das Original WEG.

    Minimieren kannst Du das Script auch noch, bevor Du es zum Server überträgst. Erschlägst Du die gesamte Übertragung auf die Test- bzw. Produktivumgebung mit einem Script, kann das auch gleich noch die Minimiererei anstoßen.

    Bonus wäre, wenn ich auch einen Trigger (welcher Art auch immer) reagieren könnte und damit dann Dateien auch von der Minifizierung ausschließen könnte.

    Du suchst Commit Hooks von SVM, siehe "Repository Hooks" im Kapitel 9 des SVN-Buchs und "Implementing Repository Hooks" im Kapitel 5.

    Aber wie gesagt, ich halte das für eine dämliche Idee. Minimiere beim Upload auf den Server, demoliere Dir nicht Deine eigenen Sources!

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Nabend

      Wozu willst Du Dir das Leben schwer machen? Wenn Du beim Update die Dateien minimierst, ist das Original WEG.

      Nein, das "svn update" läuft vom Repository auf den Webserver. Es gibt kein "svn commit" von seiten des Webservers. Die minifizierten Versionen würden also nur auf dem Webserver liegen. Die Sourcen im Repository blieben unangetastet.

      Du suchst Commit Hooks von SVM, siehe "Repository Hooks" im Kapitel 9 des SVN-Buchs und "Implementing Repository Hooks" im Kapitel 5.

      _Das_ es die Hooks gibt ist mir bekannt, nur ist/war mir kein Minification-Tool bekannt, dass ich eben über diese Hooks triggern kann.

      Bei meinen Recherchen bin ich mittlerweile auf den YUI Compressor gestoßen, welcher scheinbar dafür geeignet ist.

      Danke & Gruß
      Ole

      1. Mahlzeit,

        _Das_ es die Hooks gibt ist mir bekannt, nur ist/war mir kein Minification-Tool bekannt, dass ich eben über diese Hooks triggern kann.

        Du kannst über Hooks alles machen, was die Kommandozeile hergibt. Also z.B. auch per cURL Daten von einem Server holen, Programme starten usw.
        Wenn dein Tool also kein reines GUI-Programm ist, kein Problem.

        --
        42
        1. Guten Morgen,

          Du kannst über Hooks alles machen, was die Kommandozeile hergibt. Also z.B. auch per cURL Daten von einem Server holen, Programme starten usw.
          Wenn dein Tool also kein reines GUI-Programm ist, kein Problem.

          Alles bekannt, mir fehlt nur das entsprechende Tool, das ohne PHP oder Node.js oder andere zusätzliche Voraussetzungen läuft.
          Bisher habe ich lediglich den YUI Compressor, der wohl am nächsten an dem dran ist was ich suche.

          Danke & Gruß
          Ole

          1. Mahlzeit,

            Alles bekannt, mir fehlt nur das entsprechende Tool, das ohne PHP oder Node.js oder andere zusätzliche Voraussetzungen läuft.

            Dann ist

            1. Dein Thema falsch
            2. deine Fragestellung falsch

            Es hat absolut gar nichts mit SVN zu tun. Da solltest du dich nicht wundern, wenn die Antworten nicht deiner Erwartung entsprechen.

            --
            42
          2. Mahlzeit,

            kleiner Nachtrag: Da du bisher nicht gesagt hast, welches System du nutzt, wie willst du passende Antworten bekommen? Es gibt nichts, was auf allen Plattformen läuft.

            --
            42
            1. Mahlzeit,

              Es hat absolut gar nichts mit SVN zu tun. Da solltest du dich nicht wundern, wenn die Antworten nicht deiner Erwartung entsprechen.

              Doch, zumindest in soweit, dass das die einzige Stelle ist an der ich das Beschriebene anpacken kann. Ich habe lediglich die Möglichkeit den Minifzierungsprozess beim "svn update" auf den Webserver einen Hook oder beim "svn commit" auf die Aktionsskripte von TortoiseSVN zurückzugreifen (was das gleiche wie die Hooks ist, nur eben in den GUI-Version).

              Ich kann weder auf PHP noch Perl oder Python zurückgreifen.

              kleiner Nachtrag: Da du bisher nicht gesagt hast, welches System du nutzt, wie willst du passende Antworten bekommen? Es gibt nichts, was auf allen Plattformen läuft.

              Zumindest TortoiseSVN gibt es nur für Windows, mein Fehler, dass ich nicht explizit darauf hingewiesen habe. Für die die "svn update"-Option müsste das Tool also unter Windows 7 lauffähig sein.

              Die "svn commit"-Option auf den Webserver findet im Linux-Umfeld statt.

              Danke & Gruß
              Ole

              1. Mahlzeit,

                Ich kann weder auf PHP noch Perl oder Python zurückgreifen.
                Die "svn commit"-Option auf den Webserver findet im Linux-Umfeld statt.

                Wenn du nichts auf dem Server installieren darfst/kannst, dann ist dein Vorhaben wohl kaum umsetzbar.

                --
                42
      2. Moin Moin!

        Nabend

        Wozu willst Du Dir das Leben schwer machen? Wenn Du beim Update die Dateien minimierst, ist das Original WEG.

        Nein, das "svn update" läuft vom Repository auf den Webserver. Es gibt kein "svn commit" von seiten des Webservers. Die minifizierten Versionen würden also nur auf dem Webserver liegen. Die Sourcen im Repository blieben unangetastet.

        Ja, hast recht, irgendwie hab ich das Update die ganze Zeit als Commit gelesen. Von daher war das Quatsch.

        Du nutzt aber hier das falsche Kommando. Du willst kein Update mit SVN-Strukturen im Verzeichnis, sondern einen Export, der nur die Nutzdaten, ohne SVN-Strukturen, schreibt. Die SVN-Strukturen haben auf dem Webserver nichts verloren.

        Und wie gesagt, überlasse einem Script den Upload auf den Webserver, dann kannst Du auch noch jede Menge Optimierungen und Vorberechnungen erledigen, bevor die Dateien auf dem Webserver landen.

        Grober Ansatz:

          
        #!/bin/sh  
          
        # Sauberer Export:  
        rm -rf upload-temp  
        svn export svn+ssh://user@svnserver/svn/projekt0815/trunk upload-temp  
          
        # Nacharbeiten:  
        some-minimizer --aggressive --in-place upload-temp/static/biglib.js  
        other-minimizer -x -y -z < upload-temp/static/design.css > design-min.css  
        mv design-min.css upload-temp/static/design.css  
          
        # Vorberechnungen:  
        seach-indexer --scan --root=upload-temp --out=upload-temp/private/search-index.bin  
          
        # Aufräumarbeiten:  
        rm -rf upload-temp/non-server-stuff  
          
        # Upload  
        rsync -av --delete --rsh=ssh upload-temp/ admin@webserver:/var/www  
        
        

        Das Upload-Script packst Du natürlich mit ins Repository, weil Du zwischen svn export und rsync vermutlich öfters eingreifen wirst.

        Für meinen Geschmack sauberer wäre es, alle Nacharbeiten in einem Target im Haupt-Makefile zu erschlagen, etwa so:

          
        #!/bin/sh  
          
        # Sauberer Export:  
        rm -rf upload-temp  
        svn export svn+ssh://user@svnserver/svn/projekt0815/trunk upload-temp  
          
        # Nacharbeiten, Vorberechnungen, Aufräumarbeiten:  
        make -C upload-temp prepare-upload  
          
        # Upload  
        rsync -av --delete --rsh=ssh upload-temp/ admin@webserver:/var/www  
        
        

        Und der nächste Evolutionsschritt wäre, den Export und den rsync-Lauf auch noch als Targets ins Makefile zu packen um schließlich nur noch "make upload" tippen zu müssen.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".