or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

build-features.mdconfiguration.mdcss-preprocessing.mdfile-operations.mdframework-integration.mdindex.mdjavascript-compilation.md
tile.json

file-operations.mddocs/

File Operations

File copying, concatenation, and asset management utilities. Laravel Mix provides methods for handling static assets, combining files, and performing basic file transformations.

Capabilities

File Copying

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');

File Concatenation

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');

Glob Pattern Support

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');

File Processing Options

Babel Transformation

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);

Automatic Minification

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');

File Path Handling

Relative vs Absolute Paths

// 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.js

Directory Structure Preservation

When 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.js

Integration with Other Features

File Versioning

File 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 files

File Watching

File operations are included in the file watching system:

# Watches for changes to source files and re-copies/combines
npx mix watch

Performance Considerations

  • File copying is performed using Node.js streams for efficiency
  • Large directory copies may benefit from using copyDirectory() over multiple copy() calls
  • Babel transformation adds processing time - use only when needed
  • Glob patterns are resolved at build time, not watch time
  • Consider using webpack's built-in file loading for assets referenced in JavaScript/CSS

Error Handling

File operations will fail the build if:

  • Source files do not exist
  • Destination directories cannot be created
  • File permissions prevent copying
  • Babel transformation fails (syntax errors)

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');