File copying, concatenation, and asset management utilities. Laravel Mix provides methods for handling static assets, combining files, and performing basic file transformations.
Copy individual files or entire directories to the output destination.
/**
* Copy files specified by `from` and place them in `to`
* @param from - Source file path or array of paths (supports glob patterns)
* @param to - Destination path
* @returns Mix API instance for chaining
*/
copy(from: string | string[], to: string): Api;
/**
* Copy entire directories from source to destination
* @param from - Source directory path or array of paths
* @param to - Destination directory path
* @returns Mix API instance for chaining
*/
copyDirectory(from: string | string[], to: string): Api;Usage Examples:
const mix = require('laravel-mix');
// Copy single file
mix.copy('resources/images/logo.png', 'public/images');
// Copy multiple files
mix.copy([
'resources/fonts/roboto.woff2',
'resources/fonts/opensans.woff2'
], 'public/fonts');
// Copy with glob patterns
mix.copy('resources/images/**/*.{png,jpg,gif}', 'public/images');
// Copy entire directory
mix.copyDirectory('resources/vendor', 'public/vendor');
// Copy multiple directories
mix.copyDirectory([
'resources/icons',
'resources/graphics'
], 'public/assets');Combine multiple files into a single output file with optional Babel transformation.
/**
* Concatenate files specified by `src` and place them in `output`
* @param src - Source file path or array of paths (supports glob patterns)
* @param output - Output file path (defaults to public directory)
* @param babel - Whether to apply Babel transformation
* @returns Mix API instance for chaining
*/
combine(src: string | string[], output?: string, babel?: boolean): Api;
/**
* Alias for combine() with Babel transformation enabled
*/
babel(src: string | string[], output?: string, babel?: boolean): Api;
/**
* Alias for combine() - concatenate and minify files
*/
minify(src: string | string[], output?: string, babel?: boolean): Api;
/**
* Alias for combine() - specifically for JavaScript files
*/
scripts(src: string | string[], output?: string, babel?: boolean): Api;
/**
* Alias for combine() - specifically for CSS files
*/
styles(src: string | string[], output?: string, babel?: boolean): Api;Usage Examples:
const mix = require('laravel-mix');
// Basic file concatenation
mix.combine([
'resources/js/vendor/jquery.js',
'resources/js/vendor/bootstrap.js'
], 'public/js/vendor.js');
// Concatenate with Babel transformation
mix.combine([
'resources/js/utils.js',
'resources/js/helpers.js'
], 'public/js/utilities.js', true);
// Concatenate CSS files
mix.styles([
'resources/css/normalize.css',
'resources/css/base.css'
], 'public/css/foundation.css');
// Concatenate JavaScript files
mix.scripts([
'resources/js/plugins/slider.js',
'resources/js/plugins/modal.js'
], 'public/js/plugins.js');
// Minify and combine files
mix.minify([
'resources/js/legacy/jquery.js',
'resources/js/legacy/underscore.js'
], 'public/js/legacy.min.js');
// Using babel() alias with transformation
mix.babel([
'resources/js/es6/module1.js',
'resources/js/es6/module2.js'
], 'public/js/modern.js');All file operation methods support glob patterns for flexible file selection:
const mix = require('laravel-mix');
// Copy all images with specific extensions
mix.copy('resources/images/**/*.{png,jpg,jpeg,gif,svg}', 'public/images');
// Concatenate all JavaScript files in a directory
mix.combine('resources/js/components/*.js', 'public/js/components.js');
// Copy all files recursively except certain patterns
mix.copy('resources/assets/**/*', 'public/assets');When the babel parameter is set to true, JavaScript files are processed through Babel for ES6+ transformation:
// Without Babel (faster, no transformation)
mix.combine([
'resources/js/vanilla/script1.js',
'resources/js/vanilla/script2.js'
], 'public/js/vanilla.js', false);
// With Babel (ES6+ transformation applied)
mix.combine([
'resources/js/modern/script1.js',
'resources/js/modern/script2.js'
], 'public/js/modern.js', true);In production mode, all concatenated files are automatically minified:
// This will be minified in production
mix.combine([
'resources/js/lib1.js',
'resources/js/lib2.js'
], 'public/js/combined.js');// Relative to project root
mix.copy('resources/images/logo.png', 'public/images');
// Output paths are relative to public directory by default
mix.combine(['file1.js', 'file2.js'], 'js/combined.js'); // → public/js/combined.jsWhen copying directories, the internal structure is preserved:
// Preserves directory structure
mix.copyDirectory('resources/vendor/bootstrap', 'public/vendor/bootstrap');
// Results in:
// public/vendor/bootstrap/css/bootstrap.css
// public/vendor/bootstrap/js/bootstrap.jsFile operations work seamlessly with asset versioning:
mix.copy('resources/images/**/*', 'public/images')
.combine(['vendor1.js', 'vendor2.js'], 'public/js/vendor.js')
.version(); // Versions all copied and combined filesFile operations are included in the file watching system:
# Watches for changes to source files and re-copies/combines
npx mix watchcopyDirectory() over multiple copy() callsFile operations will fail the build if:
Common issues and solutions:
// Ensure destination directory exists
mix.copy('source.js', 'public/deep/nested/path/dest.js'); // May fail
// Better approach - copy to existing directory
mix.copy('source.js', 'public/js/dest.js');