Nachdem ja nun einfache Dinge mit gulp automatisiert werden können, kann man sich ja so langsam mal an weitere Aufgaben begeben.
Coffeescript kann bei der Arbeit mit JavaScript ja schon mal ganz hilfreich sein, nimmt es einem doch manch lästige Zeremonie von JavaScript ab und fügt gleich noch Best-Practices hinzu. Wenn man nicht immer diese .coffee-Datei nach JavaScript übersetzen (compilieren) müsste.
Mit gulp kann man das sehr gut automatisieren.
npm install gulp-coffee --save-dev
sorgt dafür, dass ich das notwendige gulp-coffee Package habe. Nun also noch eine entsprechen Task im gulpfile.js
einfügen.
gulp.task('coffee', function () { return gulp.src('app/*.coffee') .pipe(coffee()) .pipe(gulp.dest('app')); })
In diesem Fall werden also alle von Coffee-Script erzeugten Dateien ebenfalls in dem Verzeichnis app
gespeichert.
Insgesamt sieht das Build Script nun so aus:
var gulp = require('gulp'), coffee = require('gulp-coffee'), uglify = require('gulp-uglify'); gulp.task('html', function () { return gulp.src('app/*.html') .pipe(gulp.dest('dist')); }) gulp.task('js', ['coffee'], function () { return gulp.src('app/*.js') .pipe(uglify()) .pipe(gulp.dest('dist')); }) gulp.task('coffee', function () { return gulp.src('app/*.coffee') .pipe(coffee()) .pipe(gulp.dest('app')); }) gulp.task('default', ['html', 'js'], function () { })
Die Task „js“ ist dabei Abhängig von der Coffee-Task. In der Konsole sieht die Ausführung dann so aus:
D:\projects\html_app>gulp [14:43:24] Using gulpfile D:\projects\html_app\gulpfile.js [14:43:24] Starting 'html'... [14:43:24] Starting 'coffee'... [14:43:24] Finished 'coffee' after 34 ms [14:43:24] Starting 'js'... [14:43:24] Finished 'html' after 47 ms [14:43:24] Finished 'js' after 43 ms [14:43:24] Starting 'default'... [14:43:24] Finished 'default' after 13 μs
Gerade beim Umgang mit Coffeescript ist das Debugging des JavaScript Codes z.B. in der Konsole der Browsers etwas umständlich, denn hier wird ja nicht der eigentliche Coffeescript Code debuged, sondern der von Coffeescript erzeugte JavaScript Code. Moderne Browser können aber mit Hilfe von sogenannte SourceMaps auch den ursprünglichen Quellcode anzeigen und debuggen – hier also Coffeescript. Und auch dabei kann gulp helfen.
Dazu erweitern wir die Task coffee
entsprechend.
gulp.task('coffee', function () { return gulp.src('app/*.coffee') .pipe(sourceMaps.init()) .pipe(coffee()) .pipe(sourceMaps.write('../dist')) .pipe(gulp.dest('app')); })
Nun wird für jede Coffeescript-Datei eine entsprechende SourceMap-Datei in dem Verzeichnis dist
erstellt.