From 1563dfac19b74edf8952729058ca050df0973ac0 Mon Sep 17 00:00:00 2001 From: David DeSandro Date: Wed, 16 Mar 2016 09:57:15 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=B9=20Grunt=20out,=20gulp=20in?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gruntfile.js | 87 --------------------------------- gulpfile.js | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 19 +++++--- 3 files changed, 147 insertions(+), 94 deletions(-) delete mode 100644 Gruntfile.js create mode 100644 gulpfile.js diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index b3df8d2..0000000 --- a/Gruntfile.js +++ /dev/null @@ -1,87 +0,0 @@ -/*jshint node: true, strict: false */ - -// -------------------------- grunt -------------------------- // - -module.exports = function( grunt ) { - - var banner = ( function() { - var src = grunt.file.read('js/isotope.js'); - var re = new RegExp('^\\s*(?:\\/\\*[\\s\\S]*?\\*\\/)\\s*'); - var matches = src.match( re ); - var banner = matches[0].replace( 'Isotope', 'Isotope PACKAGED' ); - return banner; - })(); - - grunt.initConfig({ - // ----- global settings ----- // - namespace: 'isotope', - dataDir: 'tasks/data', - - // ----- tasks settings ----- // - - jshint: { - docs: [ 'js/**/*.js' ], - options: grunt.file.readJSON('.jshintrc') - }, - - requirejs: { - pkgd: { - options: { - baseUrl: 'bower_components', - include: [ - 'jquery-bridget/jquery-bridget', - 'isotope/js/isotope' - ], - out: 'dist/isotope.pkgd.js', - optimize: 'none', - paths: { - isotope: '../', - jquery: 'empty:' - }, - wrap: { - start: banner - } - } - } - }, - - uglify: { - pkgd: { - files: { - 'dist/isotope.pkgd.min.js': [ 'dist/isotope.pkgd.js' ] - }, - options: { - banner: banner - } - } - } - - }); - - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-requirejs'); - - grunt.registerTask( 'pkgd-edit', function() { - var outFile = grunt.config.get('requirejs.pkgd.options.out'); - var contents = grunt.file.read( outFile ); - // get requireJS definition code - var definitionRE = /define\(\s*'isotope\/js\/isotope'(.|\n)+function\( Outlayer/; - var definition = contents.match( definitionRE )[0]; - // remove name module - var fixDefinition = definition.replace( "'isotope/js/isotope',", '' ) - // ./item -> isotope/js/item - .replace( /'.\//g, "'isotope/js/" ); - contents = contents.replace( definition, fixDefinition ); - grunt.file.write( outFile, contents ); - grunt.log.writeln( 'Edited ' + outFile ); - }); - - grunt.registerTask( 'default', [ - 'jshint', - 'requirejs', - 'pkgd-edit', - 'uglify' - ]); - -}; diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..3b3d77c --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,135 @@ +/*jshint node: true, strict: false */ + +var fs = require('fs'); +var gulp = require('gulp'); +var rename = require('gulp-rename'); +var replace = require('gulp-replace'); + +// ----- hint ----- // + +var jshint = require('gulp-jshint'); + +gulp.task( 'hint-js', function() { + return gulp.src('js/*.js') + .pipe( jshint() ) + .pipe( jshint.reporter('default') ); +}); + +gulp.task( 'hint-test', function() { + return gulp.src('test/unit/*.js') + .pipe( jshint() ) + .pipe( jshint.reporter('default') ); +}); + +gulp.task( 'hint-task', function() { + return gulp.src('gulpfile.js') + .pipe( jshint() ) + .pipe( jshint.reporter('default') ); +}); + +var jsonlint = require('gulp-json-lint'); + +gulp.task( 'jsonlint', function() { + return gulp.src( '*.json' ) + .pipe( jsonlint() ) + .pipe( jsonlint.report('verbose') ); +}); + +gulp.task( 'hint', [ 'hint-js', 'hint-test', 'hint-task', 'jsonlint' ]); + +// -------------------------- make pkgd -------------------------- // + +// regex for banner comment +var reBannerComment = new RegExp('^\\s*(?:\\/\\*[\\s\\S]*?\\*\\/)\\s*'); + +function getBanner() { + var src = fs.readFileSync( 'js/isotope.js', 'utf8' ); + var matches = src.match( reBannerComment ); + var banner = matches[0].replace( 'Isotope', 'Isotope PACKAGED' ); + return banner; +} + +function addBanner( str ) { + return replace( /^/, str ); +} + +var rjsOptimize = require('gulp-requirejs-optimize'); + +gulp.task( 'requirejs', function() { + var banner = getBanner(); + // HACK src is not needed + // should refactor rjsOptimize to produce src + return gulp.src('js/isotope.js') + .pipe( rjsOptimize({ + baseUrl: 'bower_components', + optimize: 'none', + include: [ + 'jquery-bridget/jquery-bridget', + 'isotope/isotope' + ], + paths: { + isotope: '../js/', + jquery: 'empty:' + } + }) ) + // remove named module + .pipe( replace( "'isotope/isotope',", '' ) ) + // add banner + .pipe( addBanner( banner ) ) + .pipe( rename('isotope.pkgd.js') ) + .pipe( gulp.dest('dist') ); +}); + + +// ----- uglify ----- // + +var uglify = require('gulp-uglify'); + +gulp.task( 'uglify', [ 'requirejs' ], function() { + var banner = getBanner(); + gulp.src('dist/isotope.pkgd.js') + .pipe( uglify() ) + // add banner + .pipe( addBanner( banner ) ) + .pipe( rename('isotope.pkgd.min.js') ) + .pipe( gulp.dest('dist') ); +}); + +// ----- version ----- // + +// set version in source files + +var minimist = require('minimist'); +var gutil = require('gulp-util'); +var chalk = require('chalk'); + +// use gulp version -t 1.2.3 +gulp.task( 'version', function() { + var args = minimist( process.argv.slice(3) ); + var version = args.t; + if ( !version || !/^\d\.\d+\.\d+/.test( version ) ) { + gutil.log( 'invalid version: ' + chalk.red( version ) ); + return; + } + gutil.log( 'ticking version to ' + chalk.green( version ) ); + + gulp.src('js/isotope.js') + .pipe( replace( /Packery v\d\.\d+\.\d+/, 'Isotope v' + version ) ) + .pipe( gulp.dest('js') ); + + gulp.src( [ 'package.json' ] ) + .pipe( replace( /"version": "\d\.\d+\.\d+"/, '"version": "' + version + '"' ) ) + .pipe( gulp.dest('.') ); + // replace CDN links in README + var minorVersion = version.match( /^\d\.\d+/ )[0]; + gulp.src('README.mdown') + .pipe( replace( /isotope-layout@\d\.\d+/g, 'isotope-layout@' + minorVersion )) + .pipe( gulp.dest('.') ); +}); + +// ----- default ----- // + +gulp.task( 'default', [ + 'hint', + 'uglify' +]); diff --git a/package.json b/package.json index 8520395..bac7bbe 100644 --- a/package.json +++ b/package.json @@ -11,15 +11,20 @@ "outlayer": "~1.4.1" }, "devDependencies": { - "doc-ready": "1.x", - "eventie": "^1.0.5", + "chalk": "^1.1.1", + "gulp": "^3.9.1", + "gulp-jshint": "^2.0.0", + "gulp-json-lint": "^0.1.0", + "gulp-rename": "^1.2.2", + "gulp-replace": "^0.5.4", + "gulp-requirejs-optimize": "github:metafizzy/gulp-requirejs-optimize", + "gulp-uglify": "^1.5.3", + "gulp-util": "^3.0.7", "jquery": ">=1.4.3 <2", "jquery-bridget": "1.1.x", - "qunitjs": "^1.15", - "grunt": "~0.4.0", - "grunt-contrib-jshint": "~0.4.1", - "grunt-contrib-uglify": "^0.9.1", - "grunt-requirejs": "~0.4.0" + "jshint": "^2.9.1", + "minimist": "^1.2.0", + "qunitjs": "^1.15" }, "repository": { "type": "git",