zed_com

webpack.laravel.mix

Jul 22nd, 2021
961
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const mix = require('laravel-mix');
  2. const lodash = require("lodash");
  3. const fs = require('fs');
  4.  
  5. const folder = {
  6.     src: "resources/", // source files
  7.     dist: "public/", // build files
  8.     dist_assets: "public/assets/" //build assets files
  9. };
  10.  
  11. // uglify
  12. mix.options({
  13.     uglify: {
  14.         uglifyOptions: {
  15.             mangle: {
  16.                 keep_fnames: true,
  17.             }
  18.         }
  19.     }
  20. });
  21.  
  22.  
  23. //done
  24.  
  25. // disabling source maps
  26. mix.sourceMaps(false);
  27. var third_party_js = [
  28.     "./node_modules/jquery/dist/jquery.js",
  29.     "./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js",
  30.     "./node_modules/simplebar/dist/simplebar.min.js",
  31.     "./node_modules/node-waves/dist/waves.min.js",
  32.     "./node_modules/waypoints/lib/jquery.waypoints.min.js",
  33.     "./node_modules/jquery.counterup/jquery.counterup.min.js",
  34.     "./node_modules/feather-icons/dist/feather.js",
  35. ];
  36.  
  37. //copying required assets
  38. mix.combine(third_party_js, folder.dist_assets + "js/vendor.js").minify(folder.dist_assets + "js/vendor.js");
  39.  
  40. //done
  41.  
  42. // // optional third party assets
  43. var third_party_assets = {
  44.     css_js: [
  45.         {
  46.             "name": "fullcalendar-list",
  47.             "assets": [
  48.                 "./node_modules/@fullcalendar/core/main.min.js",
  49.                 "./node_modules/@fullcalendar/core/main.min.css",
  50.                 "./node_modules/@fullcalendar/bootstrap/main.min.js",
  51.                 "./node_modules/@fullcalendar/bootstrap/main.min.css",
  52.                 "./node_modules/@fullcalendar/daygrid/main.min.js",
  53.                 "./node_modules/@fullcalendar/daygrid/main.min.css",
  54.                 "./node_modules/@fullcalendar/timegrid/main.min.js",
  55.                 "./node_modules/@fullcalendar/timegrid/main.min.css",
  56.                 "./node_modules/@fullcalendar/list/main.min.js",
  57.                 "./node_modules/@fullcalendar/list/main.min.css",
  58.                 "./node_modules/@fullcalendar/interaction/main.min.js",
  59.             ]
  60.         },
  61.         {
  62.             "name": "apexcharts",
  63.             "assets": [
  64.                 "./node_modules/apexcharts/dist/apexcharts.min.js"
  65.             ]
  66.         },
  67.         {
  68.             "name": "bootstrap-datepicker",
  69.             "assets": [
  70.                 "./node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css",
  71.                 "./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js",
  72.             ]
  73.         },
  74.         {
  75.             "name": "bootstrap-maxlength",
  76.             "assets": [
  77.                 "./node_modules/bootstrap-maxlength/dist/bootstrap-maxlength.min.js",
  78.             ]
  79.         },
  80.         {
  81.             "name": "bootstrap-select",
  82.             "assets": [
  83.                 "./node_modules/bootstrap-select/dist/css/bootstrap-select.min.css",
  84.                 "./node_modules/bootstrap-select/dist/js/bootstrap-select.min.js",
  85.             ]
  86.         },
  87.         {
  88.             "name": "bootstrap-table",
  89.             "assets": [
  90.                 "./node_modules/bootstrap-table/dist/bootstrap-table.min.css",
  91.                 "./node_modules/bootstrap-table/dist/bootstrap-table.min.js",
  92.             ]
  93.         },
  94.         {
  95.             "name":"daterangepicker",
  96.             "assets": [
  97.                 "./node_modules/daterangepicker/daterangepicker.js",
  98.                 "./node_modules/daterangepicker/daterangepicker.css",
  99.             ],
  100.         },
  101.         {
  102.             "name": "datatables",
  103.             "assets": [
  104.                 "./node_modules/datatables.net/js/jquery.dataTables.min.js",
  105.                 "./node_modules/datatables.net-bs4/js/dataTables.bootstrap4.min.js",
  106.                 "./node_modules/datatables.net-bs4/css/dataTables.bootstrap4.min.css",
  107.                 "./node_modules/datatables.net-responsive/js/dataTables.responsive.min.js",
  108.                 "./node_modules/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js",
  109.                 "./node_modules/datatables.net-buttons/js/dataTables.buttons.min.js",
  110.                 "./node_modules/datatables.net-buttons-bs4/js/buttons.bootstrap4.min.js",
  111.                 "./node_modules/datatables.net-buttons/js/buttons.html5.min.js",
  112.                 "./node_modules/datatables.net-buttons/js/buttons.flash.min.js",
  113.                 "./node_modules/datatables.net-buttons/js/buttons.print.min.js",
  114.                 "./node_modules/datatables.net-keytable/js/dataTables.keyTable.min.js",
  115.                 "./node_modules/datatables.net-select/js/dataTables.select.min.js",
  116.                 "./node_modules/datatables.net-responsive-bs4/css/responsive.bootstrap4.css",
  117.                 "./node_modules/datatables.net-buttons-bs4/css/buttons.bootstrap4.css",
  118.                 "./node_modules/datatables.net-select-bs4/css/select.bootstrap4.css",
  119.             ]
  120.         },
  121.         {
  122.             "name": "flatpickr",
  123.             "assets": [
  124.                 "./node_modules/flatpickr/dist/flatpickr.min.css",
  125.                 "./node_modules/flatpickr/dist/flatpickr.min.js",
  126.             ]
  127.         },
  128.         {
  129.             "name": "jquery-countdown",
  130.             "assets": [
  131.                 "./node_modules/jquery-countdown/dist/jquery.countdown.min.js",
  132.             ]
  133.         },
  134.         {
  135.             "name": "jquery-fileupload",
  136.             "assets": [
  137.                 "./node_modules/blueimp-file-upload/js/vendor/jquery.ui.widget.js",
  138.                 "./node_modules/blueimp-file-upload/js/jquery.fileupload.js",
  139.                 "./node_modules/blueimp-file-upload/js/jquery.fileupload-process.js",
  140.                 "./node_modules/blueimp-file-upload/js/jquery.fileupload-validate.js",
  141.                 "./node_modules/blueimp-file-upload/js/jquery.fileupload-video.js",
  142.             ]
  143.         },
  144.         {
  145.             "name": "jquery-knob",
  146.             "assets": [
  147.                 "./node_modules/jquery-knob/dist/jquery.knob.min.js",
  148.             ]
  149.         },
  150.         {
  151.             "name": "jquery-mask-plugin",
  152.             "assets": [
  153.                 "./node_modules/jquery-mask-plugin/dist/jquery.mask.min.js",
  154.             ]
  155.         },
  156.         {
  157.             "name": "jquery.flot.tooltip",
  158.             "assets": [
  159.                 "./node_modules/jquery.flot.tooltip/js/jquery.flot.tooltip.min.js",
  160.             ]
  161.         },
  162.         {
  163.             "name": "jquery-toast-plugin",
  164.             "assets": [
  165.                 "./node_modules/jquery-toast-plugin/dist/jquery.toast.min.js",
  166.                 "./node_modules/jquery-toast-plugin/dist/jquery.toast.min.css",
  167.             ]
  168.         },
  169.         {
  170.             "name": "moment",
  171.             "assets": [
  172.                 "./node_modules/moment/min/moment.min.js",
  173.             ]
  174.         },
  175.         {
  176.             "name": "moment-timezone",
  177.             "assets": [
  178.                 "./node_modules/moment-timezone/builds/moment-timezone-with-data-1970-2030.min.js",
  179.             ]
  180.         },
  181.         {
  182.             "name": "parsleyjs",
  183.             "assets": [
  184.                 "./node_modules/parsleyjs/dist/parsley.min.js",
  185.             ]
  186.         },
  187.         {
  188.             "name": "run",
  189.             "assets": [
  190.                 "./node_modules/run/run.js",
  191.             ]
  192.         },
  193.         {
  194.             "name": "select2",
  195.             "assets": [
  196.                 "./node_modules/select2/dist/js/select2.min.js",
  197.                 "./node_modules/select2/dist/css/select2.min.css",
  198.             ]
  199.         },
  200.         {
  201.             "name": "simplebar",
  202.             "assets": [
  203.                 "./node_modules/simplebar/dist/simplebar.min.js",
  204.                 "./node_modules/simplebar/dist/simplebar.min.css",
  205.             ]
  206.         },
  207.         {
  208.             "name": "sweetalert2",
  209.             "assets": [
  210.                 "./node_modules/sweetalert2/dist/sweetalert2.min.js",
  211.                 "./node_modules/sweetalert2/dist/sweetalert2.min.css",
  212.             ]
  213.         },
  214.         {
  215.             "name": "tippy.js",
  216.             "assets": [
  217.                 "./node_modules/tippy.js/dist/tippy.all.min.js",
  218.             ]
  219.         },
  220.         {
  221.             "name": "bootstrap-daterangepicker",
  222.             "assets": [
  223.                 "./node_modules/bootstrap-daterangepicker/daterangepicker.js",
  224.                 "./node_modules/bootstrap-daterangepicker/daterangepicker.css",
  225.             ]
  226.         },
  227.         {
  228.             "name": "twitter-bootstrap-wizard",
  229.             "assets": [
  230.                 "./node_modules/twitter-bootstrap-wizard/jquery.bootstrap.wizard.min.js"
  231.             ]
  232.         },
  233.         {
  234.             "name": "jquery-validation",
  235.             "assets": [
  236.                 "./node_modules/jquery-validation/dist/jquery.validate.min.js"
  237.             ]
  238.         }
  239.     ]
  240. };
  241.  
  242. //copying third party assets
  243. lodash(third_party_assets).forEach(function (assets, type) {
  244.     if (type === "css_js") {
  245.         lodash(assets).forEach(function (plugin) {
  246.             var name = plugin['name'],
  247.                 assetlist = plugin['assets'],
  248.                 css = [],
  249.                 js = [];
  250.             lodash(assetlist).forEach(function (asset) {
  251.                 var ass = asset.split(',');
  252.                 for (let i = 0; i < ass.length; ++i) {
  253.                     if (ass[i].substr(ass[i].length - 3) === ".js") {
  254.                         js.push(ass[i]);
  255.                     } else {
  256.                         css.push(ass[i]);
  257.                     }
  258.                 }
  259.  
  260.             });
  261.             if (js.length > 0) {
  262.                 mix.combine(js, folder.dist_assets + "/libs/" + name + "/" + name + ".min.js");
  263.             }
  264.             if (css.length > 0) {
  265.                 mix.combine(css, folder.dist_assets + "/libs/" + name + "/" + name + ".min.css");
  266.             }
  267.         });
  268.     }
  269. });
  270.  
  271. // copy all fonts -
  272. var out = folder.dist_assets + "fonts";
  273. mix.copy(folder.src + "fonts/", out);
  274.  
  275. // copy all images -
  276. out = folder.dist_assets + "images";
  277. mix.copy(folder.src + "images/", out);
  278.  
  279. // scss
  280. var getFiles = function (dir) {
  281.     // get all 'files' in this directory
  282.     // filter directories
  283.     return fs.readdirSync(dir).filter(file => {
  284.         return fs.statSync(`${dir}/${file}`).isFile();
  285.     });
  286. };
  287.  
  288. // compile scss
  289. getFiles(folder.src + "scss").forEach(function (filepath) {
  290.     var fileName = filepath.substring(0, filepath.lastIndexOf('.')) || filepath;
  291.     mix.sass(folder.src + "scss/" + filepath, folder.dist_assets + "css").options({processCssUrls: mix.inProduction()}).minify(folder.dist_assets + "css/" + fileName + ".css").version();
  292. });
  293.  
  294. //copying code js pages related assets
  295. getFiles(folder.src + "js/pages").forEach(function (filepath) {
  296.     mix.js(folder.src + "js/pages/" + filepath, folder.dist_assets + "js/pages/" + filepath).version();
  297. });
  298.  
  299. // app theme file
  300. mix.combine([folder.src + 'js/layout.js', folder.src + 'js/app.js', folder.src + 'js/checkout.js'], folder.dist_assets + "js/app.js")
  301.     .minify(folder.dist_assets + "js/app.js").version();
  302.  
  303. // copy pdf
  304. mix.copy(folder.src + 'pdf', folder.dist_assets + 'pdf');
  305.  
  306. // app vue
  307. // mix.js(folder.src + 'js/app_vue.js', folder.dist_assets + "js/app_vue.js").vue();
  308.  
RAW Paste Data