From 24454ed96610e0d03dba7e9013f3c8fa444596db Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Fri, 3 Oct 2014 10:29:23 +0900 Subject: [PATCH] Gulpfile unification work --- gulpfile.js | 108 ++++++++++++++++++++++++++++++++++++++------------- package.json | 9 ++++- 2 files changed, 88 insertions(+), 29 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index b691512..322f78a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,43 +1,95 @@ /* - The MIT License (MIT) - Copyright (c) 2014 Alex Yatskov + The MIT License (MIT) - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Copyright (c) 2014 Alex Yatskov - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. */ -var gulp = require('gulp'); -var jshint = require('gulp-jshint'); -var nodemon = require('gulp-nodemon'); +var concat = require('gulp-concat'); +var gulp = require('gulp'); +var inject = require('gulp-inject'); +var jshint = require('gulp-jshint'); +var mainBowerFiles = require('main-bower-files'); +var minifyCss = require('gulp-minify-css'); +var minifyHtml = require('gulp-minify-html'); +var path = require('path'); +var replace = require('gulp-replace'); +var uglify = require('gulp-uglify'); + +function getBowerFiles(extension) { + var allPaths = mainBowerFiles({paths: 'client'}); + + var resultPaths = []; + for (var i = 0, count = allPaths.length; i < count; ++i) { + if (path.extname(allPaths[i]).toLowerCase() == extension) { + resultPaths.push(allPaths[i]); + } + } + + return resultPaths; +} gulp.task('lint', function() { - gulp.src(['server/*.js']).pipe(jshint()); + var scripts = ['*.js', 'client/scripts/*.js', 'server/*.js']; + gulp.src(scripts).pipe(jshint()); +}); + +gulp.task('images', function() { + return gulp.src('client/images').pipe(gulp.dest('client/dist/images')); +}); + +gulp.task('fonts', function() { + return gulp.src('client/bower_components/bootstrap/fonts/*') .pipe(gulp.dest('client/dist/fonts')); +}); + +gulp.task('scripts', function() { + var scripts = ['client/scripts/*.js'].concat(getBowerFiles('.js')); + return gulp.src(scripts).pipe(concat('scripts.js')).pipe(uglify()).pipe(gulp.dest('client/dist')); +}); + +gulp.task('styles', function() { + var styles = ['client/styles/*.css'].concat(getBowerFiles('.css')); + return gulp.src(styles).pipe(replace('../fonts/', './fonts/')).pipe(concat('styles.css')).pipe(minifyCss()).pipe(gulp.dest('client/dist')); +}); + +gulp.task('html_dev', function() { + var sources = gulp.src(getBowerFiles('.css').concat(getBowerFiles('.js')).concat(['client/scripts/*.js', 'client/styles/*.css']), {read: false}); + var target = 'client/html/index.html'; + var options = {addRootSlash: false, ignorePath: 'client'}; + return gulp.src(target).pipe(inject(sources, options)).pipe(gulp.dest('client')); +}); + +gulp.task('html_dist', ['scripts', 'styles'], function() { + var sources = gulp.src(['client/dist/*.js', 'client/dist/*.css'], {read: false}); + var options = {addRootSlash: false, ignorePath: 'client/dist'}; + var target = 'client/html/index.html'; + return gulp.src(target).pipe(inject(sources, options)).pipe(minifyHtml()).pipe(gulp.dest('client/dist')); }); gulp.task('develop', function() { - var options = { - script: 'server/server.js', - ext: 'js', - port: 8000 - }; - + var options = {script: 'server/server.js', ext: 'js', port: 8000}; return nodemon(options).on('change', ['lint']); }); -gulp.task('default', ['lint', 'develop']); +gulp.task('dev', ['lint', 'html_dev']); +gulp.task('dist', ['lint', 'fonts', 'images', 'scripts', 'styles', 'html_dist']); +gulp.task('server', ['lint', 'develop']); diff --git a/package.json b/package.json index dbf3da2..f5923c5 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,14 @@ "license": "MIT", "dependencies": { "gulp": "^3.8.8", + "gulp-concat": "^2.4.1", + "gulp-inject": "^1.0.2", "gulp-jshint": "^1.8.5", - "gulp-nodemon": "^1.0.4" + "gulp-minify-css": "^0.3.10", + "gulp-minify-html": "^0.1.5", + "gulp-nodemon": "^1.0.4", + "gulp-replace": "^0.4.0", + "gulp-uglify": "^1.0.1", + "main-bower-files": "^2.0.0" } }