Left file: appwork-v1_4_0/laravel-starter/webpack.mix.js  
Right file: appwork-v1_5_0/laravel-starter/webpack.mix.js  
1 const mix = require('laravel-mix'); = 1 const mix = require('laravel-mix');
2 const glob = require('glob')   2 const glob = require('glob')
3 const path = require('path')   3 const path = require('path')
4     4  
5 /*   5 /*
6  |--------------------------------------------------------------------------   6  |--------------------------------------------------------------------------
7  | Configure Webpack   7  | Configure Webpack
8  |--------------------------------------------------------------------------   8  |--------------------------------------------------------------------------
9  */   9  */
10     10  
11 mix.webpackConfig({   11 mix.webpackConfig({
12     output: {   12     output: {
13         libraryTarget: 'window'   13         libraryTarget: 'window'
14     },   14     },
15     module: {   15     module: {
16         rules: [{   16         rules: [{
17             test: /\.js$/,   17             test: /\.js$/,
18             include: [   18             include: [
19                 path.join(__dirname, 'node_modules/bootstrap/'),   19                 path.join(__dirname, 'node_modules/bootstrap/'),
20                 path.join(__dirname, 'node_modules/bootstrap-slider/'),   20                 path.join(__dirname, 'node_modules/bootstrap-slider/'),
21                 path.join(__dirname, 'node_modules/popper.js/'),   21                 path.join(__dirname, 'node_modules/popper.js/'),
22                 path.join(__dirname, 'node_modules/bootstrap-table/'),   22                 path.join(__dirname, 'node_modules/bootstrap-table/'),
23                 path.join(__dirname, 'node_modules/shepherd.js/'),   23                 path.join(__dirname, 'node_modules/shepherd.js/'),
24                 path.join(__dirname, 'node_modules/flot/') <> 24                 path.join(__dirname, 'node_modules/flot/'),
      25                 path.join(__dirname, 'node_modules/plyr/'),
      26                 path.join(__dirname, 'node_modules/rangetouch/')
25             ], = 27             ],
26             loader: 'babel-loader',   28             loader: 'babel-loader',
27             options: {   29             options: {
28                 presets: [['@babel/preset-env', { targets: 'last 2 versions, ie >= 10' }]],   30                 presets: [['@babel/preset-env', { targets: 'last 2 versions, ie >= 10' }]],
29                 plugins: ['@babel/plugin-transform-destructuring', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-transform-template-literals'],   31                 plugins: ['@babel/plugin-transform-destructuring', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-transform-template-literals'],
30                 babelrc: false   32                 babelrc: false
31             }   33             }
32         }]   34         }]
33     },   35     },
34     externals: {   36     externals: {
35         'jquery': 'jQuery',   37         'jquery': 'jQuery',
36         'moment': 'moment',   38         'moment': 'moment',
37         'datatables.net': '$.fn.dataTable',   39         'datatables.net': '$.fn.dataTable',
38         'spin.js': 'Spinner',   40         'spin.js': 'Spinner',
39         'jsdom': 'jsdom',   41         'jsdom': 'jsdom',
40         'd3': 'd3',   42         'd3': 'd3',
41         'eve': 'eve',   43         'eve': 'eve',
42         'velocity': 'Velocity',   44         'velocity': 'Velocity',
43         'hammer': 'Hammer',   45         'hammer': 'Hammer',
44         'raphael': 'Raphael',   46         'raphael': 'Raphael',
45         'jquery-mapael': 'Mapael',   47         'jquery-mapael': 'Mapael',
46         'pace': '"pace-progress"',   48         'pace': '"pace-progress"',
47         'popper.js': 'Popper',   49         'popper.js': 'Popper',
48         'jquery-validation': 'jQuery',   50         'jquery-validation': 'jQuery',
49     51  
50         // blueimp-file-upload plugin   52         // blueimp-file-upload plugin
51         'canvas-to-blob': 'blueimpDataURLtoBlob',   53         'canvas-to-blob': 'blueimpDataURLtoBlob',
52         'blueimp-tmpl': 'blueimpTmpl',   54         'blueimp-tmpl': 'blueimpTmpl',
53         'load-image': 'blueimpLoadImage',   55         'load-image': 'blueimpLoadImage',
54         'load-image-meta': 'null',   56         'load-image-meta': 'null',
55         'load-image-scale': 'null',   57         'load-image-scale': 'null',
56         'load-image-exif': 'null',   58         'load-image-exif': 'null',
57         'jquery-ui/ui/widget': 'null',   59         'jquery-ui/ui/widget': 'null',
58         './jquery.fileupload': 'null',   60         './jquery.fileupload': 'null',
59         './jquery.fileupload-process': 'null',   61         './jquery.fileupload-process': 'null',
60         './jquery.fileupload-image': 'null',   62         './jquery.fileupload-image': 'null',
61         './jquery.fileupload-video': 'null',   63         './jquery.fileupload-video': 'null',
62         './jquery.fileupload-validate': 'null',   64         './jquery.fileupload-validate': 'null',
63     65  
64         // blueimp-gallery plugin   66         // blueimp-gallery plugin
65         './blueimp-helper': 'jQuery',   67         './blueimp-helper': 'jQuery',
66         './blueimp-gallery': 'blueimpGallery',   68         './blueimp-gallery': 'blueimpGallery',
67         './blueimp-gallery-video': 'blueimpGallery'   69         './blueimp-gallery-video': 'blueimpGallery'
68     }   70     }
69 })   71 })
70     72  
71 /*   73 /*
72  |--------------------------------------------------------------------------   74  |--------------------------------------------------------------------------
73  | Vendor assets   75  | Vendor assets
74  |--------------------------------------------------------------------------   76  |--------------------------------------------------------------------------
75  */   77  */
76     78  
77 function mixAssetsDir(query, cb) {   79 function mixAssetsDir(query, cb) {
78     (glob.sync('resources/assets/' + query) || []).forEach(f => {   80     (glob.sync('resources/assets/' + query) || []).forEach(f => {
79         f = f.replace(/[\\\/]+/g, '/');   81         f = f.replace(/[\\\/]+/g, '/');
80         cb(f, f.replace('resources/assets', 'public'));   82         cb(f, f.replace('resources/assets', 'public'));
81     });   83     });
82 }   84 }
83     85  
84 const sassOptions = {   86 const sassOptions = {
85     implementation: () => require('node-sass')   87     implementation: () => require('node-sass')
86 };   88 };
87     89  
88 // Core stylesheets   90 // Core stylesheets
89 mix.sass('resources/assets/vendor/sass/bootstrap.scss', 'public/vendor/css', sassOptions)   91 mix.sass('resources/assets/vendor/sass/bootstrap.scss', 'public/vendor/css', sassOptions)
90    .sass('resources/assets/vendor/sass/appwork.scss', 'public/vendor/css', sassOptions)   92    .sass('resources/assets/vendor/sass/appwork.scss', 'public/vendor/css', sassOptions)
91    .sass('resources/assets/vendor/sass/theme-corporate.scss', 'public/vendor/css', sassOptions)   93    .sass('resources/assets/vendor/sass/theme-corporate.scss', 'public/vendor/css', sassOptions)
92    .sass('resources/assets/vendor/sass/colors.scss', 'public/vendor/css', sassOptions)   94    .sass('resources/assets/vendor/sass/colors.scss', 'public/vendor/css', sassOptions)
93    .sass('resources/assets/vendor/sass/uikit.scss', 'public/vendor/css', sassOptions);   95    .sass('resources/assets/vendor/sass/uikit.scss', 'public/vendor/css', sassOptions);
94     96  
95 // Core javascripts   97 // Core javascripts
96 mixAssetsDir('vendor/js/**/*.js', (src, dest) => mix.js(src, dest));   98 mixAssetsDir('vendor/js/**/*.js', (src, dest) => mix.js(src, dest));
97     99  
98 // Libs   100 // Libs
99 mixAssetsDir('vendor/libs/**/*.js', (src, dest) => mix.js(src, dest));   101 mixAssetsDir('vendor/libs/**/*.js', (src, dest) => mix.js(src, dest));
100 mixAssetsDir('vendor/libs/**/!(_)*.scss', (src, dest) => mix.sass(src, dest.replace(/\.scss$/, '.css'), sassOptions));   102 mixAssetsDir('vendor/libs/**/!(_)*.scss', (src, dest) => mix.sass(src, dest.replace(/\.scss$/, '.css'), sassOptions));
101     103  
102 // Pages   104 // Pages
103 mixAssetsDir('vendor/sass/pages/**/!(_)*.scss', (src, dest) => mix.sass(src, dest.replace(/(\\|\/)sass(\\|\/)/, '$1css$2').replace(/\.scss$/, '.css'), sassOptions));   105 mixAssetsDir('vendor/sass/pages/**/!(_)*.scss', (src, dest) => mix.sass(src, dest.replace(/(\\|\/)sass(\\|\/)/, '$1css$2').replace(/\.scss$/, '.css'), sassOptions));
104     106  
105 // Fonts   107 // Fonts
106 mixAssetsDir('vendor/fonts/*.css', (src, dest) => mix.copy(src, dest));   108 mixAssetsDir('vendor/fonts/*.css', (src, dest) => mix.copy(src, dest));
107 mixAssetsDir('vendor/fonts/*/*', (src, dest) => mix.copy(src, dest));   109 mixAssetsDir('vendor/fonts/*/*', (src, dest) => mix.copy(src, dest));
108     110  
109 /*   111 /*
110  |--------------------------------------------------------------------------   112  |--------------------------------------------------------------------------
111  | Application assets   113  | Application assets
112  |--------------------------------------------------------------------------   114  |--------------------------------------------------------------------------
113  */   115  */
114     116  
115 mix.js('resources/assets/js/application.js', 'public/js')   117 mix.js('resources/assets/js/application.js', 'public/js')
116    .sass('resources/assets/sass/application.scss', 'public/css');   118    .sass('resources/assets/sass/application.scss', 'public/css');
117     119  
118 mix.version();   120 mix.version();