Production Builds
Production builds in Deodar optimize your project for deployment with minified assets, caching, and performance enhancements. This guide covers configuration, CLI commands, and bundling for production-ready WordPress projects.
Overview
Deodar's production build system provides:
- Production Configuration: Enable caching and performance optimizations
- CLI Production Builds: Minified assets with optimized compilation
- Bundling: Create distributable ZIP archives
- Caching: Automatic transient caching for improved performance
- Asset Optimization: Minified CSS and JavaScript files
Production Configuration
Setting Production Mode
Enable production mode by setting production: true in your Deodar configuration:
<?php
/**
* Main plugin file
*
* @package YourPlugin
* @since 1.0.0
*/
// Deodar configuration
add_filter('deodar', function($config) {
return [
'path' => __DIR__,
'url' => plugin_dir_url(__FILE__),
'production' => true // Enable production mode
];
});
Production Mode Benefits
When production mode is enabled, Deodar automatically:
- Enables Transient Caching: Caches block styles, ACF blocks, walkers, and customizations
- Improves Performance: Reduces file system scans and database queries
- Optimizes Loading: Faster initialization and asset discovery
- Reduces Memory Usage: Cached results prevent repeated processing
Note: The production configuration setting only enables transient caching. For minified assets and optimized builds, use the CLI production build command.
Caching Behavior
Production mode enables transient caching for:
- Block Styles: Cached block style discovery and loading
- ACF Blocks: Cached ACF block path scanning
- Walkers: Cached walker file discovery
- Customizations: Cached customization class loading
Cache duration: 24 hours (DAY_IN_SECONDS)
CLI Production Builds
Production Build Command
Create optimized production builds using the CLI:
# Production build command
deodar production
# Alternative alias
deodar p
Production Build Features
The production build command:
- Minifies Assets: CSS and JavaScript files are minified
- Removes Source Maps: No source maps in production builds
- Optimizes Compilation: Uses esbuild for fast compilation
- Bundles Dependencies: Combines and optimizes all dependencies
Build Process
- Source Compilation: Compiles global source files
- Block Compilation: Compiles all block assets
- Minification: Minifies CSS and JavaScript
- Optimization: Optimizes file sizes and performance
Bundling
Bundle Command
Create distributable ZIP archives of your project:
# Bundle command
deodar bundle
# Alternative alias
deodar b
Bundle Features
The bundle command creates:
- ZIP Archives: High compression (level 9) for optimal file sizes
- Smart Exclusion: Respects
.bundleignorepatterns - Development File Exclusion: Excludes development files and dependencies
- Automatic Naming: Uses project name for archive naming
Bundle Configuration
Create a .bundleignore file to exclude files from bundling:
# .bundleignore
node_modules/
.git/
.gitignore
.bundleignore
*.log
*.tmp
coverage/
tests/
src/
source/
build/
dist/
Bundle Output
Bundles are created in the dist/ directory:
your-project/
├── dist/
│ └── your-project.zip
├── blocks/
├── includes/
└── your-main-file.php
Development vs Production
Development Mode
// Development configuration
add_filter('deodar', function($config) {
return [
'path' => __DIR__,
'url' => plugin_dir_url(__FILE__),
'production' => false // Development mode
];
});
Features:
- No caching (real-time file scanning)
- Source maps enabled
- Unminified assets
- Development-friendly output
Production Mode
// Production configuration
add_filter('deodar', function($config) {
return [
'path' => __DIR__,
'url' => plugin_dir_url(__FILE__),
'production' => true // Production mode
];
});
Features:
- Transient caching enabled
- No source maps
- Minified assets
- Optimized performance
Build Configuration
Deodar.json Configuration
Create a deodar.json file for build customization:
{
"externals": {
"jquery": "jQuery",
"lodash": "_"
},
"skip": [
"node_modules/**",
"dist/**",
"tests/**"
]
}
Configuration Options
| Option | Type | Description |
|---|---|---|
externals | object | External dependencies to exclude from bundling |
skip | array | File patterns to skip during compilation |
Best Practices
Production Deployment
- Enable Production Mode: Set
production: truein configuration - Run Production Build: Use
deodar productionbefore deployment - Create Bundle: Use
deodar bundlefor distribution - Test Performance: Verify caching and optimization
Performance Optimization
- Use Transients: Enable production mode for caching
- Minify Assets: Use CLI production builds for minified files
- Bundle Efficiently: Configure
.bundleignoreproperly - Monitor Cache: Clear transients when needed
Development Workflow
- Development Mode: Use
production: falseduring development - Watch Mode: Use
deodar watchfor real-time compilation - Production Testing: Test with
production: truefor caching before deployment - Bundle Creation: Create bundles for distribution
Troubleshooting
Common Issues
Production Build Not Working
- Verify CLI is installed globally
- Check project directory structure
- Ensure
deodar.jsonconfiguration is valid - Check file permissions
Caching Issues
- Clear WordPress transients
- Verify production mode is enabled
- Check transient names and keys
- Monitor cache expiration
Bundle Creation Fails
- Check
.bundleignorepatterns - Verify file permissions
- Ensure sufficient disk space
- Check for locked files
Performance Problems
- Enable production mode
- Use production builds
- Check transient caching
- Monitor memory usage
Cache Management
Clear Transients
// Clear all Deodar transients
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_deodar_%'");
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_deodar_%'");
Monitor Cache Performance
// Check if production mode is enabled
$deodar = new Deodar();
if ($deodar->production) {
echo "Production mode enabled - caching active";
} else {
echo "Development mode - no caching";
}
Examples
Complete Production Setup
<?php
/**
* Production-ready Deodar configuration
*
* @package YourPlugin
* @since 1.0.0
*/
// Enable production mode
add_filter('deodar', function($config) {
return [
'path' => __DIR__,
'url' => plugin_dir_url(__FILE__),
'production' => true
];
});
// Initialize Deodar
require_once __DIR__ . '/deodar/deodar.php';
Build Script Example
#!/bin/bash
# build.sh - Production build script
echo "🚀 Starting production build..."
# Run production build
deodar production
# Create bundle
deodar bundle
echo "✅ Production build complete!"
echo "📦 Bundle created in dist/ directory"
Package.json Scripts
{
"scripts": {
"build": "deodar production",
"bundle": "deodar bundle",
"dev": "deodar watch",
"build:prod": "deodar production && deodar bundle"
}
}
Next Steps
Now that you understand production builds:
Ready to deploy your project? Let's master the CLI tool for efficient development!