4. DER ROTE FADENDER ROTE FADEN
Was ist Grunt und was kann es?
Workflow für eine Applikation innerhalb einer Website
Tasks installieren und konfigurieren
Task-Kombinationen
Eigene Tasks
Ausführung von Grunt
Ausblick
6. WAS IST GRUNTWAS IST GRUNT
The JavaScript Task Runner
Automatisierung von wiederkehrenden Aufgaben
Fertige Plugins für viele Werkzeuge
Task-Abhängigkeiten/Reihenfolgen
Überwachung des Codes auf Änderungen
Eigene Tasks einfach möglich
8. EINFACHER WORKFLOWEINFACHER WORKFLOW
2 Extensions - Sitepackage mit SCSS und Standard-
JavaScript & Extension mit Angular-App
Ziel: Eine CSS-Datei, eine JS-Datei für die App
JavaScript im Footer, Inlinescript muss funktionieren
10. NPMNPM
Mac: Per Brew, ports, ...
Linux: apt, yum, ...
BSD: pkg, ...
Win: Node und NPM von der Website laden und
installieren (läuft!)
Nur einmal auf dem Rechner notwendig
11. COMPASSCOMPASS (DER AUFWÄNDIGSTE TEIL)(DER AUFWÄNDIGSTE TEIL)
Ruby installieren
Compass mit gem installieren
Andere Compiler sind möglich, nachher aufpassen
Nur einmal auf dem Rechner notwendig
13. NPM-PAKETE IM PROJEKTNPM-PAKETE IM PROJEKT
cd /projektverzeichnis/htdocs/typo3conf/ext/pt_site_base && npm init
npm install [paketname]
Einmal pro Projekt notwendig
14. LISTE DER PAKETE IM PROJEKTLISTE DER PAKETE IM PROJEKT
grunt: Lokale Grunt-Instanz zum Ausführen der Tasks
grunt-contrib-clean: Verzeichnisse leeren
grunt-contrib-compass: Compass aufrufen
grunt-contrib-concat: Dateien zusammenführen, ohne
den Inhalt zu verändern
grunt-contrib-copy: Dateien von A nach B kopieren
grunt-contrib-uglify: JavaScript minifyen
grunt-contrib-watch: Dateien überwachen und Tasks
starten
grunt-ng-annotate: AngularJS-Minify-Hilfe
15. LISTE DER PAKETE IM PROJEKTLISTE DER PAKETE IM PROJEKT
Wandert alles nach package.json und node_modules/
Nur die package.json muss ins VCS
Andere Entwickler benötigen nur
npm install
17. ORDNER-/DATEISTRUKTURORDNER-/DATEISTRUKTUR
Alle Entwicklungsdateien in Resources/Private
Resources/Public nach .gitignore
Alles SASS (weil Projekt-abhängig und nicht für die
Anwendung) in der base-Extension
JavaScript trennen nach Base, App und JSQueue (für
späteres Ausführen von beliebigem JS)
19. JSQUEUEJSQUEUE
Kleines JavaScript im Header, welches Inline-JavaScript
zur verspäteten Ausführung queuen kann
Kleines JavaScript im Footer, welches die gequeueten
Scripte ausführt und an jQuery weitergibt¡
Anwendung: JavaScript, welches auf Libraries zugreift
(jQuery!!!)
22. ORDNER-/DATEILISTEORDNER-/DATEILISTE
Liste nur einmal definieren und immer wieder verwenden
Alle Pfade relativ zum Gruntfile, werden so geschrieben
dass von ext/ aus geprüft wird
Reihenfolge wird beachtet
Duplikate werden nur einmal (das erste mal) verwendet
31. EIGENE TASKS IN GRUNTEIGENE TASKS IN GRUNT
Tun und lassen, was man will (und braucht)
32. KOMBINIERTE TASKS MIT ABHÄNGIGKEITKOMBINIERTE TASKS MIT ABHÄNGIGKEIT
grunt.registerTask('baseJavaScript', ['clean:baseJavaScript','clean:workingDirectory
grunt.registerTask('siteApp', 'build production ready app', function(parameter){
grunt.task.run('clean:siteApp');
grunt.task.run('clean:workingDirectory');
grunt.task.run('ngAnnotate:siteApp:' + parameter);
grunt.task.run('uglify:angularApp');
grunt.task.run('concat:angularApp');
grunt.task.run('copy:siteApp');
grunt.task.run('clean:workingDirectory');
});
33. KOMBINIERTE TASKS MIT ABHÄNGIGKEITKOMBINIERTE TASKS MIT ABHÄNGIGKEIT
(REKURSIV!)(REKURSIV!)
// Default task.
grunt.registerTask('default', 'build everything production ready', function
grunt.task.run('baseJavaScript');
grunt.task.run('siteApp');
});
grunt.registerTask('dev', 'build everything for development', function(){
grunt.task.run('baseJavaScript');
grunt.task.run('siteAppDev');
});
grunt.registerTask('w', ['dev', 'watch']);
34. EIGENE TASKS MIT PARAMETERNEIGENE TASKS MIT PARAMETERN
grunt.registerTask('helloWorld','',function(name){
grunt.log.write('running hello world with argument: ' + name + 'n'
grunt.file.write('./helloWorld.json', 'alert("Hello ' + name + '");'
});
36. AUSFÜHREN VON TASKSAUSFÜHREN VON TASKS
grunt -> Default-Task
grunt dev -> Dev-Task
grunt siteApp -> SiteApp-Task
grunt helloWorld:name -> HelloWorld mit Name
Geht auch alles mit -v (verbose)
40. Vielen Dank für die Aufmerksamkeit!
https://github.com/kabarakh/t3cs15/
http://de.slideshare.net/Kabarakh1/automatisierung-
mit-grunt
https://speakerdeck.com/kabarakh/automatisierung-
mit-grunt