const mix = require("laravel-mix"); const lodash = require("lodash"); const fs = require("fs"); const folder = { src: "resources/", // source files dist: "public/", // build files dist_assets: "public/assets/", //build assets files }; /* |-------------------------------------------------------------------------- | 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. | */ // uglify mix.options({ uglify: { uglifyOptions: { mangle: { keep_fnames: true, }, }, }, }); //done // disabling source maps mix.sourceMaps(false); var third_party_js = [ "./node_modules/jquery/dist/jquery.js", "./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js", "./node_modules/simplebar/dist/simplebar.min.js", "./node_modules/node-waves/dist/waves.min.js", "./node_modules//waypoints/lib/jquery.waypoints.min.js", "./node_modules/jquery.counterup/jquery.counterup.min.js", "./node_modules/feather-icons/dist/feather.js", ]; //copying required assets mix.combine(third_party_js, folder.dist_assets + "js/vendor.js").minify( folder.dist_assets + "js/vendor.js" ); //done // // optional third party assets var third_party_assets = { css_js: [ { name: "fullcalendar", assets: [ "./node_modules/fullcalendar/main.min.js", "./node_modules/fullcalendar/main.min.css", ], }, { name: "admin-resources", assets: [ "./node_modules/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.min.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-world-mill-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-us-merc-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-au-mill-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-us-il-chicago-mill-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-in-mill-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-uk-mill-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-ca-lcc-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-europe-mill-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-fr-merc-en.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-es-merc.js", "./node_modules/admin-resources/jquery.vectormap/maps/jquery-jvectormap-es-mill.js", "./node_modules/admin-resources/rwd-table/rwd-table.min.js", "./node_modules/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.css", "./node_modules/admin-resources/rwd-table/rwd-table.min.css", ], }, { name: "rwd-table", assets: [ "./node_modules/admin-resources/rwd-table/rwd-table.min.js", "./node_modules/admin-resources/rwd-table/rwd-table.min.css", ], }, { name: "animate.css", assets: ["./node_modules/animate.css/animate.min.css"], }, { name: "apexcharts", assets: ["./node_modules/apexcharts/dist/apexcharts.min.js"], }, { name: "autonumeric", assets: ["./node_modules/autonumeric/dist/autoNumeric.min.js"], }, { name: "bootstrap-colorpicker", assets: [ "./node_modules/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css", "./node_modules/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.min.js", ], }, { name: "bootstrap-datepicker", assets: [ "./node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css", "./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js", ], }, { name: "bootstrap-maxlength", assets: [ "./node_modules/bootstrap-maxlength/dist/bootstrap-maxlength.min.js", ], }, { name: "bootstrap-select", assets: [ "./node_modules/bootstrap-select/dist/css/bootstrap-select.min.css", "./node_modules/bootstrap-select/dist/js/bootstrap-select.min.js", ], }, { name: "bootstrap-table", assets: [ "./node_modules/bootstrap-table/dist/bootstrap-table.min.css", "./node_modules/bootstrap-table/dist/bootstrap-table.min.js", ], }, { name: "bootstrap-touchspin", assets: [ "./node_modules/bootstrap-touchspin/dist/jquery.bootstrap-touchspin.min.css", "./node_modules/bootstrap-touchspin/dist/jquery.bootstrap-touchspin.min.js", ], }, { name: "c3", assets: [ "./node_modules/c3/c3.min.css", "./node_modules/c3/c3.min.js", ], }, { name: "chart.js", assets: ["./node_modules/chart.js/dist/Chart.bundle.min.js"], }, { name: "chartist", assets: [ "./node_modules/chartist/dist/chartist.min.css", "./node_modules/chartist/dist/chartist.min.js", ], }, { name: "chartist-plugin-tooltips", assets: [ "./node_modules/chartist-plugin-tooltips/dist/chartist-plugin-tooltip.css", "./node_modules/chartist-plugin-tooltips/dist/chartist-plugin-tooltip.min.js", ], }, { name: "clockpicker", assets: [ "./node_modules/clockpicker/dist/bootstrap-clockpicker.min.css", "./node_modules/clockpicker/dist/bootstrap-clockpicker.min.js", ], }, { name: "cropper", assets: [ "./node_modules/cropper/dist/cropper.min.css", "./node_modules/cropper/dist/cropper.min.js", ], }, { name: "d3", assets: ["./node_modules/d3/dist/d3.min.js"], }, { name: "datatables", assets: [ "./node_modules/datatables.net/js/jquery.dataTables.min.js", "./node_modules/datatables.net-bs4/js/dataTables.bootstrap4.min.js", "./node_modules/datatables.net-bs4/css/dataTables.bootstrap4.min.css", "./node_modules/datatables.net-responsive/js/dataTables.responsive.min.js", "./node_modules/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js", "./node_modules/datatables.net-buttons/js/dataTables.buttons.min.js", "./node_modules/datatables.net-buttons-bs4/js/buttons.bootstrap4.min.js", "./node_modules/datatables.net-buttons/js/buttons.html5.min.js", "./node_modules/datatables.net-buttons/js/buttons.flash.min.js", "./node_modules/datatables.net-buttons/js/buttons.print.min.js", "./node_modules/datatables.net-keytable/js/dataTables.keyTable.min.js", "./node_modules/datatables.net-select/js/dataTables.select.min.js", "./node_modules/datatables.net-responsive-bs4/css/responsive.bootstrap4.css", "./node_modules/datatables.net-buttons-bs4/css/buttons.bootstrap4.css", "./node_modules/datatables.net-select-bs4/css/select.bootstrap4.css", ], }, { name: "devbridge-autocomplete", assets: [ "./node_modules/devbridge-autocomplete/dist/jquery.autocomplete.min.js", ], }, { name: "dragula", assets: [ "./node_modules/dragula/dist/dragula.min.css", "./node_modules/dragula/dist/dragula.min.js", ], }, { name: "dropify", assets: [ "./node_modules/dropify/dist/css/dropify.min.css", "./node_modules/dropify/dist/js/dropify.min.js", ], }, { name: "dropzone", assets: [ "./node_modules/dropzone/dist/min/dropzone.min.css", "./node_modules/dropzone/dist/min/dropzone.min.js", ], }, { name: "flatpickr", assets: [ "./node_modules/flatpickr/dist/flatpickr.min.css", "./node_modules/flatpickr/dist/flatpickr.min.js", ], }, { name: "flot-charts", assets: [ "./node_modules/flot-charts/jquery.flot.js", "./node_modules/flot-charts/jquery.flot.time.js", "./node_modules/flot-charts/jquery.flot.resize.js", "./node_modules/flot-charts/jquery.flot.pie.js", "./node_modules/flot-charts/jquery.flot.selection.js", "./node_modules/flot-charts/jquery.flot.stack.js", "./node_modules/flot-charts/jquery.flot.crosshair.js", ], }, { name: "flot-orderbars", assets: [ "./node_modules/flot-orderbars/js/jquery.flot.orderBars.js", ], }, { name: "footable", assets: ["./node_modules/footable/dist/footable.all.min.js"], }, { name: "gmaps", assets: ["./node_modules/gmaps/gmaps.min.js"], }, { name: "hopscotch", assets: [ "./node_modules/hopscotch/dist/css/hopscotch.min.css", "./node_modules/hopscotch/dist/js/hopscotch.min.js", ], }, { name: "ion-rangeslider", assets: [ "./node_modules/ion-rangeslider/css/ion.rangeSlider.min.css", "./node_modules/ion-rangeslider/js/ion.rangeSlider.min.js", ], }, { name: "jquery-countdown", assets: [ "./node_modules/jquery-countdown/dist/jquery.countdown.min.js", ], }, { name: "jquery-datatables-checkboxes", assets: [ "./node_modules/jquery-datatables-checkboxes/js/dataTables.checkboxes.min.js", ], }, { name: "jquery-knob", assets: ["./node_modules/jquery-knob/dist/jquery.knob.min.js"], }, { name: "jquery-mapael", assets: [ "./node_modules/jquery-mapael/js/jquery.mapael.min.js", "./node_modules/jquery-mapael/js/maps/world_countries.min.js", "./node_modules/jquery-mapael/js/maps/usa_states.min.js", ], }, { name: "jquery-mask-plugin", assets: [ "./node_modules/jquery-mask-plugin/dist/jquery.mask.min.js", ], }, { name: "jquery-mockjax", assets: [ "./node_modules/jquery-mockjax/dist/jquery.mockjax.min.js", ], }, { name: "jquery-sparkline", assets: ["./node_modules/jquery-sparkline/jquery.sparkline.min.js"], }, { name: "jquery-tabledit", assets: ["./node_modules/jquery-tabledit/jquery.tabledit.min.js"], }, { name: "jquery-toast-plugin", assets: [ "./node_modules/jquery-toast-plugin/dist/jquery.toast.min.js", "./node_modules/jquery-toast-plugin/dist/jquery.toast.min.css", ], }, { name: "jquery.flot.tooltip", assets: [ "./node_modules/jquery.flot.tooltip/js/jquery.flot.tooltip.min.js", ], }, { name: "jquery.scrollto", assets: [ "./node_modules/jquery.scrollto/dist/jquery.scrollTo.min.js", ], }, { name: "jsgrid", assets: [ "./node_modules/jsgrid/dist/jsgrid.min.js", "./node_modules/jsgrid/dist/jsgrid.min.css", ], }, { name: "ladda", assets: [ "./node_modules/ladda/dist/spin.min.js", "./node_modules/ladda/dist/ladda.min.js", "./node_modules/ladda/dist/ladda.min.css", ], }, { name: "magnific-popup", assets: [ "./node_modules/magnific-popup/dist/jquery.magnific-popup.min.js", "./node_modules/magnific-popup/dist/magnific-popup.css", ], }, { name: "minimist", assets: ["./node_modules/minimist/index.js"], }, { name: "mohithg-switchery", assets: [ "./node_modules/mohithg-switchery/dist/switchery.min.js", "./node_modules/mohithg-switchery/dist/switchery.min.css", ], }, { name: "moment", assets: ["./node_modules/moment/min/moment.min.js"], }, { name: "morris.js06", assets: ["./node_modules/morris.js06/dist/morris.min.js"], }, { name: "multiselect", assets: [ "./node_modules/multiselect/css/multi-select.css", "./node_modules/multiselect/js/jquery.multi-select.js", ], }, { name: "nestable2", assets: [ "./node_modules/nestable2/dist/jquery.nestable.min.css", "./node_modules/nestable2/dist/jquery.nestable.min.js", ], }, { name: "parsleyjs", assets: ["./node_modules/parsleyjs/dist/parsley.min.js"], }, { name: "pdfmake", assets: [ "./node_modules/pdfmake/build/pdfmake.min.js", "./node_modules/pdfmake/build/vfs_fonts.js", ], }, { name: "peity", assets: ["./node_modules/peity/jquery.peity.min.js"], }, { name: "popper.js", assets: [ "./node_modules/popper.js/dist/popper.min.js", "./node_modules/popper.js/dist/popper-utils.min.js", ], }, { name: "quill", assets: [ "./node_modules/quill/dist/quill.min.js", "./node_modules/quill/dist/quill.core.css", "./node_modules/quill/dist/quill.snow.css", "./node_modules/quill/dist/quill.bubble.css", ], }, { name: "raphael", assets: ["./node_modules/raphael/raphael.min.js"], }, { name: "run", assets: ["./node_modules/run/run.js"], }, { name: "select2", assets: [ "./node_modules/select2/dist/js/select2.min.js", "./node_modules/select2/dist/css/select2.min.css", ], }, { name: "selectize", assets: [ "./node_modules/selectize/dist/js/standalone/selectize.min.js", "./node_modules/selectize/dist/css/selectize.bootstrap3.css", ], }, { name: "simplebar", assets: [ "./node_modules/simplebar/dist/simplebar.min.js", "./node_modules/simplebar/dist/simplebar.min.css", ], }, { name: "sortablejs", assets: ["./node_modules/sortablejs/Sortable.min.js"], }, { name: "spectrum-colorpicker2", assets: [ "./node_modules/spectrum-colorpicker2/dist/spectrum.min.js", "./node_modules/spectrum-colorpicker2/dist/spectrum.min.css", ], }, { name: "summernote", assets: [ "./node_modules/summernote/dist/summernote-bs4.min.js", "./node_modules/summernote/dist/summernote-bs4.min.css", ], }, { name: "sweetalert2", assets: [ "./node_modules/sweetalert2/dist/sweetalert2.min.js", "./node_modules/sweetalert2/dist/sweetalert2.min.css", ], }, { name: "tablesaw", assets: [ "./node_modules/tablesaw/dist/tablesaw.js", "./node_modules/tablesaw/dist/tablesaw.css", ], }, { name: "tippy.js", assets: ["./node_modules/tippy.js/dist/tippy.all.min.js"], }, { name: "toastr", assets: [ "./node_modules/toastr/dist/toastr.min.js", "./node_modules/toastr/dist/toastr.min.css", ], }, { name: "twitter-bootstrap-wizard", assets: [ "./node_modules/twitter-bootstrap-wizard/jquery.bootstrap.wizard.min.js", ], }, { name: "x-editable", assets: [ "./node_modules/x-editable/dist/bootstrap-editable/css/bootstrap-editable.css", "./node_modules/x-editable/dist/bootstrap-editable/js/bootstrap-editable.min.js", ], }, ], }; //copying third party assets lodash(third_party_assets).forEach(function (assets, type) { if (type == "css_js") { lodash(assets).forEach(function (plugin) { var name = plugin["name"], assetlist = plugin["assets"], css = [], js = []; lodash(assetlist).forEach(function (asset) { var ass = asset.split(","); for (let i = 0; i < ass.length; ++i) { if (ass[i].substr(ass[i].length - 3) == ".js") { js.push(ass[i]); } else { css.push(ass[i]); } } }); if (js.length > 0) { mix.combine( js, folder.dist_assets + "/libs/" + name + "/" + name + ".min.js" ); } if (css.length > 0) { mix.combine( css, folder.dist_assets + "/libs/" + name + "/" + name + ".min.css" ); } }); } }); // copy all fonts - var out = folder.dist_assets + "fonts"; mix.copyDirectory(folder.src + "fonts/", out); // copy all images - out = folder.dist_assets + "images"; mix.copyDirectory(folder.src + "images/", out); // copy all data - out = folder.dist_assets + "data"; mix.copyDirectory(folder.src + "data/", out); // scss var getFiles = function (dir) { // get all 'files' in this directory // filter directories return fs.readdirSync(dir).filter((file) => { return fs.statSync(`${dir}/${file}`).isFile(); }); }; // compile scss [ "scss", "scss/config/creative", "scss/config/default", "scss/config/material", "scss/config/modern", "scss/config/purple", "scss/config/saas", ].forEach((scss_disc) => { getFiles(folder.src + scss_disc).forEach(function (filepath) { if (!filepath.startsWith("_")) { var fileName = filepath.substring(0, filepath.lastIndexOf(".")) || filepath; var css_disc = scss_disc .replace("scss", "css") .replace("/config", ""); var demo = scss_disc.replace("scss", "").replace("/config", ""); mix.sass( folder.src + scss_disc + "/" + filepath, folder.dist_assets + "css" + demo ) .options({ processCssUrls: mix.inProduction() }) .minify( folder.dist_assets + css_disc + "/" + fileName + ".css" ); } }); }); //copying demo pages related assets getFiles(folder.src + "js/pages").forEach(function (filepath) { mix.js( folder.src + "js/pages/" + filepath, folder.dist_assets + "js/pages/" + filepath ); }); // app theme file mix.combine( [folder.src + "js/layout.js", folder.src + "js/app.js"], folder.dist_assets + "js/app.js" ).minify(folder.dist_assets + "js/app.js");