Schlagwort-Archive: Terminal

Using Grunt „The JavaScript Task Runner“

Grunt erleichtert definitiv die Entwicklungsarbeit. Aber wie benutze ich es?

Grunt ist abhängig von node.js bzw. dessen Paketmanager npm. Diese müssen folglich vorher installiert sein.
Im Projektverzeichnis sollte eine Datei package.json vorhanden sein:

{
  "name": "myTool",
  "description": "describe the tool"
}

Danach kann Grunt für das Projekt installiert bzw. aktiviert werden:

$ npm install grunt --save-dev

Dadurch wird neues Verzeichnis node_modules im Projektverzeichnis erstellt und Grunt kann benutzt werden. Die Option –save-dev ergänzt/erweitert die devDependencies in package.json um grunt. Analog für verwendete Grunt-Plugins gilt:

$ npm install grunt-contrib-concat --save-dev
$ npm install grunt-contrib-cssmin --save-dev
$ npm install grunt-contrib-uglify --save-dev
$ npm install grunt-contrib-watch --save-dev

Anschließend sind auch die installierten Plugins einsatzbereit, bspw.

$ grunt watch

Die Konfigurationsdatei Gruntfile.js sieht in etwa so aus:

  // Creating a wrapper
module.exports = function(grunt){
    // Initializing configuration objects
  grunt.initConfig({
      // Reading 'package.json' so that we can use setting given there
    pkg : grunt.file.readJSON('package.json'),
      // specifying the settings for css file minification
    cssmin : {
      backend : {
        expand : true,
        cwd : 'web/verwaltung/css/',
        src : [ '*.css', '!*.min.css' ],
        dest : 'web/verwaltung/css/',
        ext : '.min.css'
      },
      frontend : {
        expand : true,
        cwd : 'web/styles/',
        src : [ '*.css', '!*.min.css' ],
        dest : 'web/styles/',
        ext : '.min.css'
      },
      options: {
        banner: '/*! <%= pkg.name %> - <%= grunt.template.today("yyyy-mm-dd H:M") %> */'
      }
    },
      // specifying the settings for js file minification
    uglify : {
      backend: {
        files: {
          'web/verwaltung/js/be.min.js': ['web/js/jquery.jnotify.js','web/js/shared/dialog-service.js','web/verwaltung/js/app.js']
        }
      },
      frontendApp: {
        files: {
          'web/js/app.min.js': ['web/js/jquery.jnotify.js','web/js/shared/dialog-service.js','web/js/snv.js']
        }
      },
      frontendNgGrid: {
        files: {
          'web/js/angular-gridster.min.js': ['web/js/angular-gridster.js']
        }
      },
      options: {
        banner: '/*! <%= pkg.name %> - <%= grunt.template.today("yyyy-mm-dd H:M") %> */'
      }
    },
      // @see http://www.thegeekstuff.com/2014/10/grunt-contrib-watch-automate/
    watch: {
      backend: {
        files: ['web/verwaltung/css/*.css','web/verwaltung/js/*.js'],
        tasks: ['minifyBE'],
        options: {
          spawn:false,
          event:['all']
        }
      },
      frontend: {
        files: ['web/styles/*.css','web/js/*.js'],
        tasks: ['minifyFE'],
        options: {
          spawn:false,
          event:['all']
        }
      }
    }
  });
    // Loading grunt-packages
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-watch');
    // Registering tasks
  grunt.registerTask( 'minifyBE', [ 'cssmin:backend', 'uglify:backend' ] );
  grunt.registerTask( 'minifyFE', [ 'cssmin:frontend', 'uglify:frontendApp', 'uglify:frontendNgGrid' ] );
}

Die mit registerTask() hinterlegten Aufgaben können mittels Konsole auch separat gestartet werden:

$ grunt minifyBE

Backup bei jweiland

Die Hosting-Pakete bei jweiland enthalten stets ein Sicherungsskript, welches sowohl physische Dateien als auch die Datenbanken sichern kann. Da ich persönlich lieber mit tar arbeite, jweiland im Sicherungsskript aber mit gzip spielt, hier mal eine kurze Übersicht über die Möglichkeiten des Archivierens unter Linux und OSX.

gzip

Das wohl praktischste Tool ist gzip, wodurch eine per LZ77-Kompression verkleinerte Datei entsteht.

$ gzip FILE

erzeugt FILE.gz und löscht FILE
z.B.: $ gzip dump.sql => dump.sql.gz

$ gunzip FILE

entpackt (dekomprimiert) die Datei FILE und löscht das Archiv anschließend, z.B.: $gunzip dump.sql.gz => dump.sql

tar

Das umfangreichste Tool ist meiner Meinung nach tar:

$ tar -czf FILE file1 file2

erstellt ein gzip-Archiv FILE aus dem Inhalt der Dateien file1 und file2, z.B. $ tar -czf dump.tar.gz struktur.sql daten.sql.

$ tar -czf FILE FOLDER
$ tar -czf FILE FOLDER/
$ tar -czf FILE FOLDER/*

In obigem Beispiel erzeugen die ersten beiden Befehle die Datei FILE samt dem Verzeichnis FOLDER, wohingegen der dritte Befehl lediglich den Inhalt des Verzechnisses in die Kompression einschließt (wobei die Information des Verzeichnispfades nicht verloren geht und mit in das Archiv übernommen wird). Mittels

$ tar -tf FILE

stellt das Ergebnis – die gepackten Dateien – übersichtlich dar.

$ tar -xzf FILE

anschließend zum Entpacken des Archivs verwenden, wobei das Ziel beachtet werden sollte! Obiges Beispiel entpackt den Inhalt in das aktuelle Verzeichnis. Sollte lediglich ein Verzeichnis im Archiv enthalten sein, wird es keine Probleme geben.