Hi @consil
Yes you're exactly right (though I'm sure you meant Gulp as opposed to guzzle, that's a different package for HTTP requests)
As @JeffreyWay said, Elixir is a wrapper for Gulp. Think of it this way. Laravel is a wrapper for Symfony 2. Of course there is much more to it than just Symfony 2 (or 3 actually now), but the same idea applies. Laravel uses many packages from Symfony to do what it does. Elixir is the same, it uses many NodeJS packages to simplify your build process, it's just written in Javascript.
NodeJS == PHP
NPM == Composer
Elixir == Laravel
Gulp == Symfony 3
Just as you mentioned, the same way scheduler gives you shortcuts and makes running cron jobs simple, Elixir does the same with your build environment.
Here is my entire Gulpfile for my current project that I mentioned earlier:
var elixir = require('laravel-elixir');
/*
|--------------------------------------------------------------------------
| Elixir Asset Management
|--------------------------------------------------------------------------
|
| Elixir provides a clean, fluent API for defining some basic Gulp tasks
| for your Laravel application. By default, we are compiling the Sass
| file for our application, as well as publishing vendor resources.
|
*/
elixir(function(mix) {
/**
* First let's copy all of our fonts to the assets directory.
*/
mix.copy(
'resources/assets/fonts',
'public/assets/fonts'
);
/**
* This is some stupid shit, but we also have to copy all the
* fonts to the build/assets/fonts directory for versioning. :(
*/
mix.copy(
'resources/assets/fonts',
'public/build/assets/fonts'
);
/**
* Let's copy our images, most of these are for the demo
* so we'll need to weed through them when we're ready.
*/
mix.copy(
'resources/assets/img',
'public/assets/img'
);
/**
* More stupid shit! Images as well it seems must
* be located in the build directory.
*/
mix.copy(
'resources/assets/img',
'public/build/assets/img'
);
/**
* Demo ajax (remove)
*/
mix.copy(
'resources/assets/ajax',
'public/assets/ajax'
);
/**
* Helper JS. At this point I'm unsure how much of
* this needs to remain.
*/
mix.copy([
'resources/assets/js/quirk/charts.js',
'resources/assets/js/quirk/dashboard.js',
'resources/assets/js/quirk/html5shiv.js',
'resources/assets/js/quirk/map.apple.js',
'resources/assets/js/quirk/map.bluewater.js',
'resources/assets/js/quirk/map.mapbox.js',
'resources/assets/js/quirk/map.shadesofgrey.js',
'resources/assets/js/quirk/map.shiftworker.js',
'resources/assets/js/quirk/modernizr.js',
'resources/assets/js/quirk/respond.js'
], 'public/assets/js/');
/**
* Less mix some css, "less" get it? =)
*/
mix.less(
'app.less',
'public/assets/css/app.css'
);
/**
* Build the application.
*/
mix.scripts([
'quirk/plugins/jquery.js',
'quirk/plugins/ui.js',
'quirk/plugins/touch-punch.js',
'quirk/plugins/bootstrap.js',
'quirk/plugins/handlebars.js',
'quirk/plugins/autosize.js',
'quirk/plugins/select.js',
'quirk/plugins/toggles.js',
'quirk/plugins/gritter.js',
'quirk/plugins/data-tables.js',
'quirk/plugins/bootstrap-tables.js',
'quirk/plugins/steps.js',
'quirk/plugins/maskedinput.js',
'quirk/plugins/timepicker.js',
'quirk/plugins/dropzone.js',
'quirk/plugins/colorpicker.js',
'quirk/plugins/validate.js',
'quirk/plugins/summernote.js',
'quirk/plugins/flot.js',
'quirk/plugins/flot-resize.js',
'quirk/plugins/flot-symbol.js',
'quirk/plugins/flot-crosshair.js',
'quirk/plugins/flot-categories.js',
'quirk/plugins/flot-pie.js',
'quirk/plugins/flot-spline.js',
'quirk/plugins/knob.js',
'quirk/plugins/morris.js',
'quirk/plugins/raphael.js',
'quirk/plugins/sparkline.js',
'quirk/plugins/gmaps.js',
'quirk/plugins/sweetalert.js',
'quirk/quirk.js'
], 'public/assets/js/app.js');
/**
* Let's create some cache busting versions.
*/
mix.version([
'assets/css/*.css',
'assets/js/*.js'
]);
});
And given this is a bit verbose simply because all the javascript files need to be in a very specific order so I mix them by hand so to speak.
The cool thing is, you're not forced to stick with the file paths that Elixir comes with our of the box. I've used Elixir in several non-Laravel projects as well, I simply reset all the paths to whatever I want them to be with a config object and we're all good.
Very flexible and very cool!
Hope it helps =)