Build/grunt: Minify CSS files, using sqwish.

This commit is contained in:
Jörn Zaefferer 2012-03-06 20:15:51 +01:00
parent 02981c7c40
commit cc3b08df2d
2 changed files with 43 additions and 13 deletions

View File

@ -1,13 +1,10 @@
/*global config:true, task:true*/
var coreFiles = 'jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.effects.core.js'.split(', ');
var allFiles = coreFiles.map(function(file) {
var uiFiles = coreFiles.map(function(file) {
return 'ui/' + file;
}).concat(file.expand('ui/*.js').filter(function(file) {
return coreFiles.indexOf(file.substring(3)) === -1;
}));
var rawList = allFiles.map(function(file) {
return file.substring(3);
});
var minify = {
'dist/ui/minified/jquery-ui.min.js': ['<banner:meta.bannerAll>', 'dist/ui/jquery-ui.js'],
@ -16,19 +13,23 @@ var minify = {
function minFile(file) {
minify['dist/' + file.replace(/\.js$/, '.min.js').replace(/ui\//, 'ui/minified/')] = ['<banner>', file];
}
allFiles.forEach(minFile);
uiFiles.forEach(minFile);
var allI18nFiles = file.expand('ui/i18n/*.js');
allI18nFiles.forEach(minFile);
var i18nfiles = allI18nFiles.map(function(file) {
return file.substring(8);
});
// TODO move core to the front, theme to the end, exclude all and base
var cssFiles = file.expand('themes/base/*.css');
function createBanner(files) {
// strip folders
var fileNames = files && files.map(function(file) {
return file.replace(/.+\/(.+)$/, '$1');
});
return '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
'<%= template.today("isoDate") %>\n' +
'<%= pkg.homepage ? "* " + pkg.homepage + "\n" : "" %>' +
(files ? '* Includes: ' + files.join(', ') + '\n' : '') +
(files ? '* Includes: ' + fileNames.join(', ') + '\n' : '') +
'* Copyright (c) <%= template.today("yyyy") %> <%= pkg.author.name %>;' +
' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */';
}
@ -37,14 +38,21 @@ config.init({
pkg: '<json:package.json>',
meta: {
banner: createBanner(),
bannerAll: createBanner(rawList),
bannerI18n: createBanner(i18nfiles)
bannerAll: createBanner(uiFiles),
bannerI18n: createBanner(allI18nFiles),
bannerCSS: createBanner(cssFiles)
},
concat: {
'dist/ui/jquery-ui.js': allFiles,
'dist/ui/jquery-ui.js': uiFiles,
'dist/ui/i18n/jquery-ui-i18n.js': 'ui/i18n/*.js'
},
min: minify,
css_min: {
dist: {
src: ['<banner:meta.bannerCSS>'].concat(cssFiles),
dest: 'dist/themes/base/minified/jquery-ui.min.css'
}
},
zip: {
dist: {
src: [
@ -107,5 +115,26 @@ task.registerBasicTask('zip', 'Create a zip file for release', function(data) {
log.writeln("Wrote " + files.length + " files to " + data.dest);
});
task.registerBasicTask( 'css_min', 'Minify CSS files with Sqwish.', function( data ) {
var files = file.expand( data.src );
// Get banner, if specified. It would be nice if UglifyJS supported ignoring
// all comments matching a certain pattern, like /*!...*/, but it doesn't.
var banner = task.directive(files[0], function() { return null; });
if (banner === null) {
banner = '';
} else {
files.shift();
}
var max = task.helper( 'concat', files );
// Concat banner + minified source.
var min = banner + require('sqwish').minify( max, false );
file.write( data.dest, min );
if ( task.hadErrors() ) {
return false;
}
log.writeln( 'File "' + data.dest + '" created.' );
task.helper( 'min_max_info', min, max );
});
task.registerTask('default', 'lint qunit');
task.registerTask('release', 'concat min zip');

View File

@ -27,7 +27,8 @@
"dependencies": {},
"devDependencies": {
"grunt": "0.2.x",
"adm-zip": "0.1.x"
"adm-zip": "0.1.x",
"sqwish": "0.2.x"
},
"keywords": []
}