Laravel Tutorials

Overriding Laravel Elixir Configs

Published
Overriding Laravel Elixir Configs image

Laravel Elixir is fantastic for your Laravel projects and it comes with defaults that “just work” within a Laravel application. It works so well that I like to use it for managing all my asset processing even in apps that are not on Laravel.

As an example, I wanted to create a new WordPress theme and found a theme scaffolding system called underscores which comes with SASS files but not gulp. I decided this would be a good overview on how to setup Elixir to work with uncommon structures.

Create your theme

From the underscores site you can quickly generate a new theme by filling out a few text fields:

This generates a download that looks like this:

As you can see, the “sass” and “js” directory are in the main directory and not in “assets” as Laravel does. Let’s install Elixir and change this so it works.

Install Elixir

Installing Elixir is as easy as pulling in the npm module. I just copied and pasted the package.json file from the Elixir repo so I could be sure I had all the things I needed:

{
  "private": true,
  "scripts": {
    "prod": "gulp --production",
    "dev": "gulp watch"
  },
  "devDependencies": {
    "axios": "^0.15.2",
    "gulp": "^3.9.1",
    "laravel-elixir": "^6.0.0-11",
    "laravel-elixir-webpack-official": "^1.0.2"
  }
}

Next, create a gulpfile.js by copying over the defaults. These will be adjusted:

const elixir = require('laravel-elixir');

elixir((mix) => {
    mix.sass('app.scss')
       .webpack('app.js');
});

Adjusting the Gulpfile and change the config

The gulpfile is looking for app.scss and an app.js that will be inside resources/assets/sass and resources/assets/js. Since we do not have these locations let’s adjust our file to point to the style.scss and replace webpack with the scripts method to concatenate and minify the js:

elixir((mix) => {
    mix.sass('style.scss')
       .scripts(['customizer.js', 'navigation.js', 'skip-link-focus-fix.js']);
});

Now, we need to tell Elixir where these are found. You can open elixir/src/config.js to see all the options and over-riding them is as simple as:

elixir.config.assetsPath = './';
elixir.config.publicPath = './';
elixir.config.css.outputFolder = './';

elixir((mix) => {
    mix.sass('style.scss')
       .scripts(['customizer.js', 'navigation.js', 'skip-link-focus-fix.js']);
});

With that all set it’ll look for the style.scss inside the “sass” folder and the JavaScript inside the “js” folder. By setting all the paths to the theme root it removes that default “resources/assets/” to the path.

Any other items inside the Elixir Config can be over-ridden like this and that you gives you a lot of flexibility for using it in any project you are working on.

Eric L. Barnes photo

Eric is the creator of Laravel News and has been covering Laravel since 2012.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
Insert Middleware Before or After Existing Laravel Middleware image

Insert Middleware Before or After Existing Laravel Middleware

Read article
Laravel Herd 2: Coding Agents, Workspaces, and Cloud Deploys image

Laravel Herd 2: Coding Agents, Workspaces, and Cloud Deploys

Read article
Strict Request Input Casting in Laravel image

Strict Request Input Casting in Laravel

Read article
Prevent Duplicate File Uploads With Laravel Storage Dedupler image

Prevent Duplicate File Uploads With Laravel Storage Dedupler

Read article
Slow Job Alerts and Replica Commit IDs in Laravel 13.40 image

Slow Job Alerts and Replica Commit IDs in Laravel 13.40

Read article
Flock: A Free, Native Herd Alternative for Laravel image

Flock: A Free, Native Herd Alternative for Laravel

Read article