diff --git a/gulpfile.coffee b/gulpfile.coffee deleted file mode 100644 index 3e293e3..0000000 --- a/gulpfile.coffee +++ /dev/null @@ -1,125 +0,0 @@ -browserify = require 'browserify' -browserSync = require 'browser-sync' -duration = require 'gulp-duration' -ecstatic = require 'ecstatic' -gulp = require 'gulp' -gutil = require 'gulp-util' -jade = require 'gulp-jade' -notify = require 'gulp-notify' -path = require 'path' -prefix = require 'gulp-autoprefixer' -source = require 'vinyl-source-stream' -sourcemaps = require 'gulp-sourcemaps' -streamify = require 'gulp-streamify' -stylus = require 'gulp-stylus' -uglify = require 'gulp-uglify' -watchify = require 'watchify' - -production = process.env.NODE_ENV is 'production' - -config = - scripts: - source: './src/coffee/main.coffee' - extensions: ['.coffee'] - destination: './public/js/' - filename: 'bundle.js' - templates: - source: './src/jade/*.jade' - watch: './src/jade/*.jade' - destination: './public/' - styles: - source: './src/stylus/style.styl' - watch: './src/stylus/*.styl' - destination: './public/css/' - assets: - source: './src/assets/**/*.*' - watch: './src/assets/**/*.*' - destination: './public/' - -browserifyConfig = - entries: [config.scripts.source] - extensions: config.scripts.extensions - debug: not production - cache: {} - packageCache: {} - -handleError = (err) -> - gutil.log err - gutil.beep() - - notify - title: 'Compile Error' - message: err.message - - this.emit 'end' - -gulp.task 'scripts', -> - pipeline = browserify(browserifyConfig) - .bundle() - .on 'error', handleError - .pipe source config.scripts.filename - - pipeline = build.pipe(streamify(uglify())) if production - - pipeline.pipe gulp.dest config.scripts.destination - -gulp.task 'templates', -> - pipeline = gulp - .src config.templates.source - .pipe jade pretty: not production - .on 'error', handleError - .pipe gulp.dest config.templates.destination - - if production then pipeline else pipeline.pipe browserSync.reload(stream: true) - -gulp.task 'styles', -> - pipeline = gulp.src config.styles.source - - pipeline = pipeline.pipe(sourcemaps.init()) unless production - - pipeline = pipeline.pipe stylus - 'include css': true - compress: production - .on 'error', handleError - .pipe prefix 'last 2 versions', 'Chrome 34', 'Firefox 28', 'iOS 7' - - pipeline = pipeline.pipe(sourcemaps.write '.') unless production - pipeline = pipeline.pipe gulp.dest config.styles.destination - - if production then pipeline else pipeline.pipe browserSync.stream match: '**/*.css' - -gulp.task 'assets', -> - gulp - .src config.assets.source - .pipe gulp.dest config.assets.destination - -gulp.task 'server', -> - browserSync - open: false - port: 9001 - server: - baseDir: './public' - -gulp.task 'watch', -> - gulp.watch config.templates.watch, ['templates'] - gulp.watch config.styles.watch, ['styles'] - gulp.watch config.assets.watch, ['assets'] - - bundle = watchify browserify browserifyConfig - - bundle.on 'update', -> - build = bundle.bundle() - .on 'error', handleError - .pipe source config.scripts.filename - - build - .pipe gulp.dest config.scripts.destination - .pipe(duration('Rebundling browserify bundle')) - .pipe(browserSync.reload(stream: true)) - - .emit 'update' - -buildTasks = ['templates', 'styles', 'assets'] - -gulp.task 'build', buildTasks.concat ['scripts'] -gulp.task 'default', buildTasks.concat ['watch', 'server'] diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..deb0d50 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,157 @@ +'use strict'; + +var browserify = require('browserify'); +var browserSync = require('browser-sync'); +var duration = require('gulp-duration'); +var ecstatic = require('ecstatic'); +var gulp = require('gulp'); +var gutil = require('gulp-util'); +var jade = require('gulp-jade'); +var notify = require('gulp-notify'); +var prefix = require('gulp-autoprefixer'); +var source = require('vinyl-source-stream'); +var sourcemaps = require('gulp-sourcemaps'); +var streamify = require('gulp-streamify'); +var stylus = require('gulp-stylus'); +var uglify = require('gulp-uglify'); +var watchify = require('watchify'); + +var production = process.env.NODE_ENV === 'production'; + +var config = { + scripts: { + source: './src/coffee/main.coffee', + extensions: ['.coffee'], + destination: './public/js/', + filename: 'bundle.js' + }, + templates: { + source: './src/jade/*.jade', + watch: './src/jade/*.jade', + destination: './public/' + }, + styles: { + source: './src/stylus/style.styl', + watch: './src/stylus/*.styl', + destination: './public/css/' + }, + assets: { + source: './src/assets/**/*.*', + watch: './src/assets/**/*.*', + destination: './public/' + } +}; + +var browserifyConfig = { + entries: [config.scripts.source], + extensions: config.scripts.extensions, + debug: !production, + cache: {}, + packageCache: {} +}; + +function handleError(err) { + gutil.log(err); + gutil.beep(); + notify({ + title: 'Compile Error', + message: err.message + }); + return this.emit('end'); +} + +gulp.task('scripts', function() { + var pipeline = browserify(browserifyConfig) + .bundle() + .on('error', handleError) + .pipe(source(config.scripts.filename)); + + if (production) { + pipeline = pipeline.pipe(streamify(uglify())); + } + return pipeline.pipe(gulp.dest(config.scripts.destination)); +}); + +gulp.task('templates', function() { + var pipeline = gulp.src(config.templates.source) + .pipe(jade({ + pretty: !production + })) + .on('error', handleError) + .pipe(gulp.dest(config.templates.destination)); + + if(production) { + return pipeline; + } + + return pipeline.pipe(browserSync.reload({ + stream: true + })); +}); + +gulp.task('styles', function() { + var pipeline = gulp.src(config.styles.source); + + if (!production) { + pipeline = pipeline.pipe(sourcemaps.init()); + } + + pipeline = pipeline.pipe(stylus({ + 'include css': true, + compress: production + })) + .on('error', handleError) + .pipe(prefix('last 2 versions', 'Chrome 34', 'Firefox 28', 'iOS 7')); + + if (!production) { + pipeline = pipeline.pipe(sourcemaps.write('.')); + } + + pipeline = pipeline.pipe(gulp.dest(config.styles.destination)); + + if (production) { + return pipeline; + } + + return pipeline.pipe(browserSync.stream({ + match: '**/*.css' + })); +}); + +gulp.task('assets', function() { + return gulp.src(config.assets.source) + .pipe(gulp.dest(config.assets.destination)); +}); + +gulp.task('server', function() { + return browserSync({ + open: false, + port: 9001, + server: { + baseDir: './public' + } + }); +}); + +gulp.task('watch', function() { + gulp.watch(config.templates.watch, ['templates']); + gulp.watch(config.styles.watch, ['styles']); + gulp.watch(config.assets.watch, ['assets']); + + var bundle = watchify(browserify(browserifyConfig)); + + bundle.on('update', function() { + var build = bundle.bundle() + .on('error', handleError) + .pipe(source(config.scripts.filename)); + + build.pipe(gulp.dest(config.scripts.destination)) + .pipe(duration('Rebundling browserify bundle')) + .pipe(browserSync.reload({stream: true})); + }).emit('update'); +}); + +var buildTasks = ['templates', 'styles', 'assets']; + +gulp.task('build', buildTasks.concat(['scripts'])); +gulp.task('default', buildTasks.concat(['watch', 'server'])); diff --git a/package.json b/package.json index 975caa2..3379a50 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,7 @@ "gulp", "template" ], - "dependencies": { - "coffee-script": "~1.8.0" - }, + "dependencies": {}, "devDependencies": { "bower": "~1.3.5", "browser-sync": "^2.7.2",