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