Minifier of js, css, html and img files with CLI and programmatic interfaces
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Comprehensive command-line interface for minifying web assets with support for file processing, stdin/stdout operations, and flexible configuration options.
The minify CLI provides multiple operation modes for different use cases.
# File processing
minify [files...]
# Stdin processing with format specification
minify --js # Process stdin as JavaScript
minify --css # Process stdin as CSS
minify --html # Process stdin as HTML
minify --auto # Auto-detect stdin format
# Information commands
minify --help # Display help information
minify --version # Display version informationBasic Usage Examples:
# Minify a single file
minify script.js
# Minify multiple files
minify app.js styles.css index.html
# Minify with output redirection
minify script.js > script.min.js
# Process stdin with format detection
cat source.js | minify --js
# Auto-detect format from stdin
echo "body { color: red; }" | minify --autoProcess multiple files simultaneously with automatic format detection based on file extensions.
# Syntax
minify file1.js file2.css file3.html [options]
# Supported extensions
# .js - JavaScript files
# .css - CSS files
# .html - HTML filesFile Processing Examples:
# Single file minification
minify app.js
# Output: Minified JavaScript content to stdout
# Multiple mixed files
minify src/main.js assets/style.css templates/index.html
# Output: Each file's minified content in sequence
# Wildcard file selection
minify assets/*.css
# Output: All CSS files in assets/ directory minified
# Complex file patterns
minify src/**/*.js dist/*.css
# Output: All JS files recursively from src/ and CSS from dist/The CLI outputs minified content to stdout by default:
# Direct console output
minify script.js
# Displays minified content
# Save to new file
minify script.js > script.min.js
# Append to existing file
minify additional.js >> combined.min.js
# Process multiple files to separate outputs
for file in *.js; do
minify "$file" > "${file%.js}.min.js"
doneProcess content from stdin with explicit format specification.
# JavaScript processing
minify --js < input.js
cat source.js | minify --js
echo "function test() { return true; }" | minify --js
# CSS processing
minify --css < styles.css
curl -s https://example.com/style.css | minify --css
# HTML processing
minify --html < template.html
cat page.html | minify --html
# Auto-detection processing
minify --auto < unknown-content.txt
curl -s https://api.example.com/content | minify --autoStdin Processing Examples:
# JavaScript minification from stdin
cat << 'EOF' | minify --js
function calculateSum(numbers) {
let total = 0;
for (let i = 0; i < numbers.length; i++) {
total += numbers[i];
}
return total;
}
EOF
# Output: function calculateSum(a){let b=0;for(let c=0;c<a.length;c++)b+=a[c];return b}
# CSS minification with pipe
echo "body { margin: 0px; padding: 10px; color: #ffffff; }" | minify --css
# Output: body{margin:0;padding:10px;color:#fff}
# HTML minification
cat << 'EOF' | minify --html
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
EOF
# Output: <html><head><title>Test Page</title></head><body><h1>Hello World</h1></body></html>Display comprehensive usage information and available options.
minify --help
minify -h
# Output format:
# Usage: minify [options]
# Options:
# -h, --help display this help and exit
# -v, --version display version and exit
# --js minify javascript
# --css minify css
# --html minify html
# --auto auto detect formatDisplay the current version of the minify package.
minify --version
minify -v
# Output: v14.1.0Information Command Examples:
# Get help information
minify --help
# Displays usage instructions and available options
# Check version
minify --version
# Displays: v14.1.0
# Version check in scripts
VERSION=$(minify --version)
echo "Using minify $VERSION"The CLI automatically loads configuration from .minify.json files in the current directory or parent directories.
{
"js": {
"type": "terser",
"terser": {
"mangle": true,
"compress": {
"drop_console": true
}
}
},
"css": {
"type": "clean-css",
"clean-css": {
"level": 2
}
},
"html": {
"removeComments": true,
"collapseWhitespace": true,
"minifyJS": true,
"minifyCSS": true
},
"img": {
"maxSize": 50000
}
}Configuration Usage Examples:
# Create project configuration
cat << 'EOF' > .minify.json
{
"js": {
"type": "esbuild",
"esbuild": {
"minifyIdentifiers": true,
"minifyWhitespace": true
}
},
"css": {
"type": "lightningcss"
}
}
EOF
# Use configuration with file processing
minify src/app.js assets/style.css
# Applies .minify.json settings automatically
# Use configuration with stdin
cat script.js | minify --js
# Uses esbuild settings from .minify.jsonThe CLI provides robust error handling with informative messages.
# Exit codes
# 0 - Success
# 1 - Error (file not found, processing error, etc.)
# Error handling behavior
set -e # Exit on error
minify nonexistent.js 2>/dev/null || echo "File not found"
# Capture errors
ERROR_LOG=$(minify invalid-syntax.js 2>&1)
if [ $? -ne 0 ]; then
echo "Minification failed: $ERROR_LOG"
fiError Handling Examples:
# File not found error
minify missing-file.js
# Error: ENOENT: no such file or directory, open 'missing-file.js'
# Unsupported file type
minify document.pdf
# Error: File type "pdf" not supported.
# Configuration file error
echo "{ invalid json }" > .minify.json
minify script.js
# Error: [Configuration parsing error message]
# Stdin timeout handling
timeout 5s minify --js # Will timeout if no input providedUse process substitution for complex workflows:
# Compare original and minified sizes
diff <(wc -c < original.js) <(minify original.js | wc -c)
# Minify and validate in pipeline
minify script.js | node -c # Check syntax of minified code
# Process remote content
minify --css < <(curl -s https://example.com/style.css)Create efficient batch processing workflows:
#!/bin/bash
# Batch minification script
# Create output directory
mkdir -p dist/
# Process all JavaScript files
find src/ -name "*.js" -exec sh -c '
minify "$1" > "dist/$(basename "$1" .js).min.js"
' _ {} \;
# Process all CSS files
find assets/ -name "*.css" -exec sh -c '
minify "$1" > "dist/$(basename "$1" .css).min.css"
' _ {} \;
echo "Minification complete!"Integrate with common build tools and workflows:
# Makefile integration
minify-assets:
minify src/app.js > dist/app.min.js
minify assets/style.css > dist/style.min.css
# npm script integration
# package.json:
# "scripts": {
# "minify": "minify src/*.js src/*.css"
# }
# CI/CD pipeline integration
minify assets/*.js assets/*.css > /dev/null
if [ $? -eq 0 ]; then
echo "✓ Minification successful"
else
echo "✗ Minification failed"
exit 1
fi# Performance considerations
# - File I/O overhead for multiple files
# - Stdin buffer size limitations
# - Configuration file parsing on each invocation
# - Process startup overhead for small files
# Optimization strategies
# - Process multiple files in single invocation
# - Use stdin for programmatic usage
# - Cache configuration parsing in scripts
# - Consider programmatic API for high-frequency usage# Current limitations
# - No recursive directory processing built-in
# - No watch mode for file changes
# - No parallel processing of multiple files
# - No output directory specification
# - No source map generation support
# Workarounds
# Use find/xargs for recursive processing
find . -name "*.js" | xargs -I {} minify {}
# Use inotify for watch mode
inotifywait -m -e modify src/ | while read; do
minify src/*.js > dist/bundle.min.js
done