11var gulp = require ( 'gulp' ) ;
22var eslint = require ( 'gulp-eslint' ) ;
3+ var uglify = require ( 'gulp-uglify' ) ;
4+ var concat = require ( 'gulp-concat' ) ;
5+ var cleanCSS = require ( 'gulp-clean-css' ) ;
36var gulpStyleLint = require ( 'gulp-stylelint' ) ;
47var browserSync = require ( 'browser-sync' ) . create ( ) ;
58var sass = require ( 'gulp-sass' ) ;
@@ -14,12 +17,12 @@ var sourcemaps = require('gulp-sourcemaps');
1417
1518// Static Server + watching scss/html files
1619gulp . task ( 'serve' , [ 'sass' , 'js' ] , function ( ) {
17- browserSync . init ( {
18- server : './public'
19- } ) ;
20- gulp . watch ( 'app/**/*.scss' , [ 'sass' ] ) ;
21- gulp . watch ( 'app/**/*.js' , [ 'js' ] ) ;
22- gulp . watch ( 'public/*.html' ) . on ( 'change' , browserSync . reload ) ;
20+ browserSync . init ( {
21+ server : './public'
22+ } ) ;
23+ gulp . watch ( 'app/**/*.scss' , [ 'sass' ] ) ;
24+ gulp . watch ( 'app/**/*.js' , [ 'js' ] ) ;
25+ gulp . watch ( 'public/*.html' ) . on ( 'change' , browserSync . reload ) ;
2326} ) ;
2427
2528// Run lint for sass
@@ -39,27 +42,43 @@ gulp.task('jslint', function() {
3942 . pipe ( eslint . format ( ) ) ;
4043} ) ;
4144
45+ // Min js files
46+ gulp . task ( 'uglify' , [ 'js' ] , function ( ) {
47+ return gulp . src ( './public/js/build.js' )
48+ . pipe ( uglify ( ) )
49+ . pipe ( concat ( 'build.js' ) )
50+ . pipe ( gulp . dest ( './public/js' ) )
51+ } ) ;
52+
53+ // Min css files
54+ gulp . task ( 'minify-css' , [ 'sass' ] , function ( ) {
55+ return gulp . src ( './public/css/main.css' )
56+ . pipe ( cleanCSS ( ) )
57+ . pipe ( concat ( 'main.css' ) )
58+ . pipe ( gulp . dest ( './public/css' ) )
59+ } ) ;
60+
4261// Compile sass into CSS & auto-inject into browsers
4362gulp . task ( 'sass' , [ 'stylelint' ] , function ( ) {
44- return gulp . src ( './app/main.scss' )
45- . pipe ( sass ( ) . on ( 'error' , sass . logError ) )
46- . pipe ( autoprefixer ( {
47- browsers : [ 'last 2 versions' ] ,
48- cascade : false
49- } ) )
50- . pipe ( sourcemaps . init ( { loadMaps : true } ) )
51- . pipe ( sourcemaps . write ( './' ) )
52- . pipe ( gulp . dest ( './public/css' ) )
53- . pipe ( browserSync . stream ( ) )
54- . pipe ( notify ( { message : 'CSS created!' , onLast : true } ) ) ;
63+ return gulp . src ( './app/main.scss' )
64+ . pipe ( sass ( ) . on ( 'error' , sass . logError ) )
65+ . pipe ( autoprefixer ( {
66+ browsers : [ 'last 2 versions' ] ,
67+ cascade : false
68+ } ) )
69+ . pipe ( sourcemaps . init ( { loadMaps : true } ) )
70+ . pipe ( sourcemaps . write ( './' ) )
71+ . pipe ( gulp . dest ( './public/css' ) )
72+ . pipe ( browserSync . stream ( ) )
73+ . pipe ( notify ( { message : 'CSS created!' , onLast : true } ) ) ;
5574} ) ;
5675
5776// Transpile ES6 js (React app) into JS & auto-inject into browsers
5877gulp . task ( 'js' , [ 'jslint' ] , function ( ) {
5978 var bundler = browserify ( './app/app.js' ) . transform ( "babelify" , { presets : [ "es2015" , "react" ] } ) ;
6079 return bundler . bundle ( )
6180 . on ( 'error' , function ( err ) { console . error ( err ) ; this . emit ( 'end' ) ; } )
62- . pipe ( source ( 'app .js' ) )
81+ . pipe ( source ( 'build .js' ) )
6382 . pipe ( buffer ( ) )
6483 . pipe ( sourcemaps . init ( { loadMaps : true } ) )
6584 . pipe ( sourcemaps . write ( './' ) )
@@ -68,5 +87,20 @@ gulp.task('js', ['jslint'], function() {
6887 . pipe ( notify ( { message : 'JS bundle created!' , onLast : true } ) ) ;
6988} ) ;
7089
90+ // PRODUCTION
91+ gulp . task ( 'set-prod-node-env' , function ( ) {
92+ return process . env . NODE_ENV = 'production' ;
93+ } ) ;
94+
95+ gulp . task ( 'production' , [ 'uglify' , 'minify-css' , 'set-prod-node-env' ] ) ;
96+
97+ // Start server without build
98+ gulp . task ( 'start' , [ 'production' ] , function ( ) {
99+ browserSync . init ( {
100+ server : './public'
101+ } ) ;
102+ } ) ;
103+
71104// Tasks
72105gulp . task ( 'default' , [ 'serve' ] ) ;
106+
0 commit comments