Grunt plugin for CSS minification using clean-css library
npx @tessl/cli install tessl/npm-grunt-contrib-cssmin@5.0.0grunt-contrib-cssmin is a Grunt plugin that provides CSS minification capabilities using the clean-css library. It registers a multi-task for minifying CSS files in Grunt build processes, with support for source maps, file concatenation, and detailed compression reporting.
npm install grunt-contrib-cssmin --save-dev// Load as Grunt plugin
grunt.loadNpmTasks('grunt-contrib-cssmin');
// Or load tasks manually
require('grunt-contrib-cssmin')(grunt);// In Gruntfile.js
grunt.initConfig({
cssmin: {
options: {
sourceMap: true,
report: 'min'
},
target: {
files: {
'dist/output.min.css': ['src/input1.css', 'src/input2.css']
}
}
}
});
// Register and run the task
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.registerTask('default', ['cssmin']);The plugin exports a function that registers the cssmin task with Grunt.
/**
* Main plugin registration function
* @param grunt - Grunt instance
*/
function cssminPlugin(grunt: GruntInstance): void;The plugin registers a multi-task named 'cssmin' that can be configured with multiple targets.
/**
* Grunt multi-task registration for CSS minification
* Task name: 'cssmin'
* Description: 'Minify CSS'
* @param taskName - The task name ('cssmin')
* @param description - Task description ('Minify CSS')
* @param taskFunction - Task implementation function
*/
grunt.registerMultiTask(taskName: string, description: string, taskFunction: function): void;The cssmin task accepts configuration options that control minification behavior.
interface CssminOptions {
/** Report compression results: 'min' for basic stats, 'gzip' for gzip comparison */
report?: 'min' | 'gzip';
/** Enable source map generation */
sourceMap?: boolean;
/** Enable URL rebasing relative to destination directory */
rebase?: boolean;
/** Enable debug output showing detailed clean-css statistics */
debug?: boolean;
// All clean-css options are supported
/** Merge properties into shorthand equivalents */
mergeIntoShorthands?: boolean;
/** Precision for rounding pixel values (-1 disables rounding) */
roundingPrecision?: number;
/** Control special comment preservation */
keepSpecialComments?: '*' | '1' | '0' | 1 | 0;
/** Path to rebase relative URLs against (auto-set when rebase: true) */
rebaseTo?: string;
/** Control @import inlining */
inline?: string[] | boolean;
/** Advanced clean-css optimization level */
level?: 0 | 1 | 2;
}Standard Grunt file configuration patterns are supported for flexible input/output mapping.
interface FileConfiguration {
/** Static file mapping: destination -> source array */
files?: { [dest: string]: string[] };
/** Dynamic file mapping with glob patterns */
files?: Array<{
/** Enable dynamic file expansion */
expand: boolean;
/** Source directory for glob patterns */
cwd: string;
/** Source file patterns */
src: string[];
/** Destination directory */
dest: string;
/** File extension for output files */
ext?: string;
}>;
}The task provides comprehensive error handling and logging.
interface MinificationResult {
/** CSS output string */
styles: string;
/** Source map if enabled */
sourceMap?: SourceMap;
/** Array of error messages */
errors: string[];
/** Array of warning messages */
warnings: string[];
/** Minification statistics */
stats: {
efficiency: number;
minifiedSize: number;
originalSize: number;
timeSpent: number;
};
}cssmin: {
target: {
files: {
'dest/output.min.css': ['src/input.css']
}
}
}cssmin: {
combine: {
files: {
'dist/styles.min.css': [
'src/reset.css',
'src/base.css',
'src/components.css'
]
}
}
}cssmin: {
minify: {
files: [{
expand: true,
cwd: 'src/css',
src: ['*.css', '!*.min.css'],
dest: 'dist/css',
ext: '.min.css'
}]
}
}cssmin: {
options: {
sourceMap: true,
report: 'gzip',
mergeIntoShorthands: false,
roundingPrecision: -1,
keepSpecialComments: '*',
rebase: true
},
production: {
files: {
'dist/app.min.css': ['src/**/*.css']
}
}
}cssmin: {
options: {
level: 2,
inline: ['remote'],
keepSpecialComments: 0
},
advanced: {
files: {
'build/optimized.css': ['src/styles.css']
}
}
}The task provides detailed feedback about the minification process including file creation statistics and compression ratios using the maxmin library for size comparison reporting.