Skip to content

Instantly share code, notes, and snippets.

@t2k
Created March 30, 2014 14:21
Show Gist options
  • Save t2k/9873426 to your computer and use it in GitHub Desktop.
Save t2k/9873426 to your computer and use it in GitHub Desktop.
Gulpfile coffeescript
gulp = require 'gulp'
gutil = require 'gulp-util'
coffee = require 'gulp-coffee'
coffeelint = require 'gulp-coffeelint'
less = require 'gulp-less'
clean = require 'gulp-clean'
uglify = require 'gulp-uglify'
runSequence = require 'run-sequence'
concat = require 'gulp-concat'
minifyCSS = require 'gulp-minify-css'
# config
build=
client: 'build'
server: 'lib'
src=
client: 'src/client/**/*.coffee'
server: 'src/server/**/*.coffee'
less: ['bower_components/font-awesome/less/font-awesome.less, bower_components/bootstrap/less/bootstrap.less, bower_components/bootstrap-social/bootstrap-social.less']
dist=
client: 'build/js'
css: 'build/css'
server: 'lib'
# Delete/clean the build folders for client and server
gulp.task "clean", ->
gulp.src [build.client, build.server]
.pipe do clean
# Copy tasks
gulp.task 'copy', ->
#bower client dependencies to build
gutil.log "=> copying bower_components to client build..."
gulp.src 'bower_components/**/*'
.pipe gulp.dest 'build/bower_components/'
#client templates
gutil.log "=> copying client/mustache templates..."
gulp.src 'src/client/**/*.htm'
.pipe gulp.dest 'build/js/'
#bootstrap less
gutil.log "=> copying bootstrap less to src/client/less "
gulp.src 'bower_components/bootstrap/less/*.less'
.pipe gulp.dest 'src/client/less'
#bootstrap-social
gutil.log "=> copying bootstrap-social less into src/client/less..."
gulp.src 'bower_components/bootstrap-social/bootstrap-social.less'
.pipe gulp.dest 'src/client/less'
#bootstrap fonts
gutil.log "=> copying bootstrap fonts to build..."
gulp.src 'bower_components/bootstrap/dist/fonts/*'
.pipe gulp.dest 'build/fonts/'
# font awesoem
gutil.log "=> copying font-awesome fonts to build..."
gulp.src 'bower_components/fontawesome/fonts/*'
.pipe gulp.dest 'build/fonts/'
#misc requirejs
gutil.log "=> uglify require.js loader"
gulp.src 'bower_components/requirejs/require.js'
.pipe do uglify
.pipe gulp.dest 'build/js'
gulp.task 'lint', ->
#lint coffeescript
gutil.log "=> linting all COFFEE source"
gulp.src [src.client, src.server]
.pipe do coffeelint
#less to css + minifyCSS
gulp.task 'less', ->
gutil.log "=> compiling client LESS"
#compile .less probably concat & minify etc...
# all imports go inside main.less
gulp.src 'src/client/less/main.less'
.pipe do less
.pipe do minifyCSS
.pipe gulp.dest 'build/css'
gulp.task 'coffee', ->
# bare true for server/nodejs modules
gutil.log "=> compiling COFFEE server"
gulp.src src.server
.pipe coffee bare: true
.on 'error', gutil.log
.pipe gulp.dest dist.server
# bare false for AMD client modules wraps modules
gutil.log "=> compiling COFFEE client"
gulp.src src.client
.pipe coffee bare: false # wrap js modules
.on 'error', gutil.log
.pipe gulp.dest dist.client
gulp.task 'watch', ->
gutil.log "=> start watching..."
gulp.watch [src.client, src.server], ['coffee']
gulp.watch 'src/client/**/*.htm' , ['copy-client-templates']
gulp.watch 'src/client/less/**/*.less' , ['less']
# Define the default task as a sequence of the above tasks
gulp.task "default", ->
runSequence 'clean', 'copy', 'lint', 'less', 'coffee', 'watch'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment