Browse Source

🍹 Grunt out, gulp in

pull/1127/head
David DeSandro 9 years ago
parent
commit
1563dfac19
  1. 87
      Gruntfile.js
  2. 135
      gulpfile.js
  3. 19
      package.json

87
Gruntfile.js

@ -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'
]);
};

135
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'
]);

19
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",

Loading…
Cancel
Save