Laravel.io
let mix = require('laravel-mix');
let lodash = require('lodash');
let ImageminPlugin = require( 'imagemin-webpack-plugin' ).default;

mix.webpackConfig( {
    plugins: [
        new ImageminPlugin( {
//            disable: process.env.NODE_ENV !== 'production', // Disable during development
            pngquant: {
                quality: '95-100',
            },
            test: /\.(jpe?g|png|gif|svg)$/i,
        } ),
    ],
} )

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel application. By default, we are compiling the Sass
 | file for the application as well as bundling up all the JS files.
 |
   // Full API
    // mix.js(src, output);
    // mix.react(src, output); <-- Identical to mix.js(), but registers React Babel compilation.
    // mix.extract(vendorLibs);
    // mix.sass(src, output);
    // mix.standaloneSass('src', output); <-- Faster, but isolated from Webpack.
    // mix.fastSass('src', output); <-- Alias for mix.standaloneSass().
    // mix.less(src, output);
    // mix.stylus(src, output);
    // mix.postCss(src, output, [require('postcss-some-plugin')()]);
    // mix.browserSync('my-site.dev');
    // mix.combine(files, destination);
    // mix.babel(files, destination); <-- Identical to mix.combine(), but also includes Babel compilation.
    // mix.copy(from, to);
    // mix.copyDirectory(fromDir, toDir);
    // mix.minify(file);
    // mix.sourceMaps(); // Enable sourcemaps
    // mix.version(); // Enable versioning.
    // mix.disableNotifications();
    // mix.setPublicPath('path/to/public');
    // mix.setResourceRoot('prefix/for/resource/locators');
    // mix.autoload({}); <-- Will be passed to Webpack's ProvidePlugin.
    // mix.webpackConfig({}); <-- Override webpack.config.js, without editing the file directly.
    // mix.then(function () {}) <-- Will be triggered each time Webpack finishes building.
    // mix.options({
    //   extractVueStyles: false, // Extract .vue component styling to file, rather than inline.
    //   processCssUrls: true, // Process/optimize relative stylesheet url()'s. Set to false, if you don't want them touched.
    //   purifyCss: false, // Remove unused CSS selectors.
    //   uglify: {}, // Uglify-specific options. https://webpack.github.io/docs/list-of-plugins.html#uglifyjsplugin
    //   postCss: [] // Post-CSS options: https://github.com/postcss/postcss/blob/master/docs/plugins.md
    // });
 */
 
let assets = {
        js: [
            './node_modules/jquery/dist/jquery.min.js',
            './node_modules/axios/dist/axios.min.js',
            './node_modules/bootstrap/dist/js/bootstrap.bundle.min.js', // bootstrap & popper.js
            './node_modules/moment/min/moment.min.js',
            './node_modules/fullcalendar/dist/fullcalendar.js', // [1]
            './node_modules/chart.js/dist/Chart.min.js',
            './node_modules/dragula/dist/dragula.min.js',
            './node_modules/select2/dist/js/select2.full.min.js',
            './node_modules/dropzone/dist/dropzone.js',
            './node_modules/datatables.net/js/jquery.dataTables.js',
            './node_modules/@fengyuanchen/datepicker/dist/datepicker.min.js',
            './node_modules/jqvmap/dist/jquery.vmap.min.js',
            './node_modules/jqvmap/dist/maps/jquery.vmap.world.js',
            './node_modules/jquery-match-height/dist/jquery.matchHeight-min.js',
            './node_modules/imagesloaded/imagesloaded.pkgd.min.js',
            './node_modules/jquery-depends-on/dist/dependsOn.min.js',
            './node_modules/selectize.js/dist/js/standalone/selectize.min.js',
            './node_modules/highcharts/js/highcharts.js',
            './node_modules/highcharts/js/modules/wordcloud.js',
            './node_modules/masonry-layout/dist/masonry.pkgd.min.js',
            './node_modules/jquery-collapse/src/jquery.collapse.js',
            './node_modules/noty/lib/noty.min.js',
            './node_modules/gasparesganga-jquery-loading-overlay/dist/loadingoverlay.min.js',
            './node_modules/rss-parser/dist/rss-parser.min.js',
            './node_modules/css-element-queries/src/ResizeSensor.js'

        ],
        scss: [
            './node_modules/bootstrap/dist/css/bootstrap-grid.css',
            './node_modules/fullcalendar/dist/fullcalendar.css', // [1]
            './node_modules/dragula/dist/dragula.css',
            './node_modules/select2/dist/css/select2.css',
            './node_modules/dropzone/dist/dropzone.css',
            './node_modules/@fengyuanchen/datepicker/dist/datepicker.css',
            './node_modules/jqvmap/dist/jqvmap.css',
            './node_modules/selectize.js/dist/css/selectize.css',
            './node_modules/highcharts/css/highcharts.scss',
            './node_modules/noty/lib/noty.css',
            './node_modules/noty/lib/themes/mint.css'
        ] 
    };
	
	let folder = 'resources/assets/';
	lodash(assets).forEach(function (assets, type) {
        if (type == "scss") {
			mix.copy(assets, 'resources/assets/sass/vendor');
        } else {
			mix.copy(assets, 'resources/assets/js/vendor');
        }
    });
	
	mix.copy('resources/assets/images', 'public/images', false);
	mix.copy('resources/assets/fonts', 'public/fonts', false);
	
	mix.standaloneSass('resources/assets/sass/main.scss', 'public/css').sourceMaps();
	mix.standaloneSass('resources/assets/sass/app.scss', 'public/css').sourceMaps();
	mix.standaloneSass('resources/assets/sass/login.scss', 'public/css').sourceMaps();

	mix.scripts([
            folder + 'js/vendor/jquery.min.js',
            folder + 'js/vendor/axios.min.js',
            folder + 'js/vendor/bootstrap.bundle.min.js', 
            folder + 'js/vendor/moment.min.js',
            folder + 'js/vendor/Chart.min.js',
            folder + 'js/vendor/dragula.min.js',
            folder + 'js/vendor/select2.full.min.js',
            folder + 'js/vendor/dropzone.js', 
            folder + 'js/vendor/jquery.dataTables.js',
            folder + 'js/vendor/fullcalendar.js', 
            folder + 'js/vendor/datepicker.min.js',
            folder + 'js/vendor/jquery.vmap.min.js',
            folder + 'js/vendor/jquery.vmap.world.js',
            folder + 'js/vendor/jquery.matchHeight-min.js',
            folder + 'js/vendor/dependsOn.min.js',
            folder + 'js/vendor/selectize.min.js',
            folder + 'js/vendor/highcharts.js',
            folder + 'js/vendor/wordcloud.js',
            folder + 'js/vendor/masonry.pkgd.min.js',
            folder + 'js/vendor/jquery.collapse.js',
            folder + 'js/vendor/jquery.collapse_storage.js',
            folder + 'js/vendor/noty.min.js',
            folder + 'js/vendor/loadingoverlay.min.js',
            folder + 'js/vendor/rss-parser.min.js',
            folder + 'js/vendor/ResizeSensor.js',
			], 'public/js/vendor.js');
			
	mix.scripts([
            folder + 'js/switch.js',
            folder + 'js/toggle.js',
            folder + 'js/main.js'
			], 'public/js/common.js');
			
	mix.scripts([
            folder + 'js/login.js'
			], 'public/js/login.js');		
			
	mix.scripts([
            folder + 'js/app/app.js'
			], 'public/js/app.js');

Please note that all pasted data is publicly available.