On Github keithmorris / presentation-gulp-intro
<project basedir="../" default="dist" name="MyProject"> <description>simple example build file</description> <!-- set global properties for this build --> <property location="src" name="src"></property> <property location="build" name="build"></property> <property location="dist" name="dist"></property> <target name="init"> <!-- Create the time stamp --> <tstamp></tstamp> <!-- Create the build directory structure used by compile --> <mkdir dir="${build}"></mkdir> </target> <target depends="init" description="compile the source " name="compile"> <!-- Compile the java code from ${src} into ${build} --> <javac destdir="${build}" srcdir="${src}"></javac> </target> <target depends="compile" description="generate the distribution" name="dist"> <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"></mkdir> <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> <jar basedir="${build}" jarfile="${dist}/lib/MyProject-${DSTAMP}.jar"></jar> </target> <target description="clean up" name="clean"> <!-- Delete the ${build} and ${dist} directory trees --> <delete dir="${build}"></delete> <delete dir="${dist}"></delete> </target> </project>
grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), meta: { banner: '/*!\n' + ' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' + ' * http://lab.hakim.se/reveal-js\n' + ' * MIT licensed\n' + ' *\n' + ' * Copyright (C) 2014 Hakim El Hattab, http://hakim.se\n' + ' */' }, qunit: { files: [ 'test/*.html' ] }, uglify: { options: { banner: '<%= meta.banner %>\n' }, build: { src: 'js/reveal.js', dest: 'js/reveal.min.js' } }, cssmin: { compress: { files: { 'css/reveal.min.css': [ 'css/reveal.css' ] } } }, sass: { main: { files: { 'css/theme/default.css': 'css/theme/source/default.scss', 'css/theme/beige.css': 'css/theme/source/beige.scss', 'css/theme/night.css': 'css/theme/source/night.scss', 'css/theme/serif.css': 'css/theme/source/serif.scss', 'css/theme/simple.css': 'css/theme/source/simple.scss', 'css/theme/sky.css': 'css/theme/source/sky.scss', 'css/theme/moon.css': 'css/theme/source/moon.scss', 'css/theme/solarized.css': 'css/theme/source/solarized.scss', 'css/theme/blood.css': 'css/theme/source/blood.scss' } } }, jshint: { options: { curly: false, eqeqeq: true, immed: true, latedef: true, newcap: true, noarg: true, sub: true, undef: true, eqnull: true, browser: true, expr: true, globals: { head: false, module: false, console: false, unescape: false } }, files: [ 'Gruntfile.js', 'js/reveal.js' ] }, connect: { server: { options: { port: port, base: '.' } } }, zip: { 'reveal-js-presentation.zip': [ 'index.html', 'css/**', 'js/**', 'lib/**', 'images/**', 'plugin/**' ] }, watch: { main: { files: [ 'Gruntfile.js', 'js/reveal.js', 'css/reveal.css' ], tasks: 'default' }, theme: { files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ], tasks: 'themes' } } });
Plus a little Node.js/NPM
(And it's JUST JavaScript!)
gulp.task(name, fn)
It registers the function with a name.
You can optionally specify some dependencies if other tasks need to run first.
This returns a readable stream.
Takes a file system glob (like grunt) and starts emitting files that match.
This returns a writable stream
File objects piped to this are saved to the file system
gulp.watch(glob, fn || ['task'])
Runs a function or one or more gulp.tasks when a file that matches the glob changes.
(Again... just JavaScript)
// Node.js modules used by the tasks var gulp = require('gulp'), less = require('gulp-less'), concat = require('gulp-concat'), uglify = require('gulp-uglify'), mocha = require('gulp-mocha'), run = require('run-sequence'); // The Gulp tasks gulp.task('less', function () { return gulp.src(['./less/styles.less']) .pipe(less()) .pipe(gulp.dest('./css/')); }); gulp.task('watch', function () { return gulp.watch('./less/**/*.less', ['less']); }); gulp.task('test', function () { return gulp.src('./test/tests/**/*.js') .pipe(mocha()); }); gulp.task('concat', function () { return gulp.src(['./js/**/*.js']) .pipe(concat('scripts.min.js')) .pipe(uglify()) .pipe(gulp.dest('./js/')); }); gulp.task('dist', function (callback) { run('test', ['test', 'less'], callback); }); gulp.task('default', ['dist']);