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