146 lines
4.6 KiB
JavaScript
146 lines
4.6 KiB
JavaScript
const { EnvironmentPlugin } = require('webpack');
|
|
const mix = require('laravel-mix');
|
|
const glob = require('glob');
|
|
const path = require('path');
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Configure mix
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
mix.options({
|
|
resourceRoot: process.env.ASSET_URL || undefined,
|
|
processCssUrls: false,
|
|
postCss: [require('autoprefixer')]
|
|
});
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Configure Webpack
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
mix.webpackConfig({
|
|
output: {
|
|
publicPath: process.env.ASSET_URL || undefined,
|
|
libraryTarget: 'window'
|
|
},
|
|
plugins: [
|
|
new EnvironmentPlugin({
|
|
// Application's public url
|
|
BASE_URL: process.env.ASSET_URL ? `${process.env.ASSET_URL}/` : '/'
|
|
})
|
|
],
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.es6$|\.js$/,
|
|
include: [
|
|
path.join(__dirname, 'node_modules/bootstrap/'),
|
|
path.join(__dirname, 'node_modules/popper.js/'),
|
|
path.join(__dirname, 'node_modules/shepherd.js/')
|
|
],
|
|
loader: 'babel-loader',
|
|
options: {
|
|
presets: [['@babel/preset-env', { targets: 'last 2 versions, ie >= 10' }]],
|
|
plugins: [
|
|
'@babel/plugin-transform-destructuring',
|
|
'@babel/plugin-proposal-object-rest-spread',
|
|
'@babel/plugin-transform-template-literals'
|
|
],
|
|
babelrc: false
|
|
}
|
|
}
|
|
]
|
|
},
|
|
externals: {
|
|
jquery: 'jQuery',
|
|
moment: 'moment',
|
|
'datatables.net': '$.fn.dataTable',
|
|
jsdom: 'jsdom',
|
|
velocity: 'Velocity',
|
|
hammer: 'Hammer',
|
|
pace: '"pace-progress"',
|
|
chartist: 'Chartist',
|
|
'popper.js': 'Popper',
|
|
|
|
// blueimp-gallery plugin
|
|
'./blueimp-helper': 'jQuery',
|
|
'./blueimp-gallery': 'blueimpGallery',
|
|
'./blueimp-gallery-video': 'blueimpGallery'
|
|
}
|
|
});
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Vendor assets
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
function mixAssetsDir(query, cb) {
|
|
(glob.sync('resources/assets/' + query) || []).forEach(f => {
|
|
f = f.replace(/[\\\/]+/g, '/');
|
|
cb(f, f.replace('resources/assets/', 'public/assets/'));
|
|
});
|
|
}
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Configure sass
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
const sassOptions = {
|
|
precision: 5
|
|
};
|
|
|
|
// Core stylesheets
|
|
mixAssetsDir('vendor/scss/**/!(_)*.scss', (src, dest) =>
|
|
mix.sass(src, dest.replace(/(\\|\/)scss(\\|\/)/, '$1css$2').replace(/\.scss$/, '.css'), { sassOptions })
|
|
);
|
|
|
|
// Core javascripts
|
|
mixAssetsDir('vendor/js/**/*.js', (src, dest) => mix.js(src, dest));
|
|
|
|
// Libs
|
|
mixAssetsDir('vendor/libs/**/*.js', (src, dest) => mix.js(src, dest));
|
|
mixAssetsDir('vendor/libs/**/!(_)*.scss', (src, dest) =>
|
|
mix.sass(src, dest.replace(/\.scss$/, '.css'), { sassOptions })
|
|
);
|
|
mixAssetsDir('vendor/libs/**/*.{png,jpg,jpeg,gif}', (src, dest) => mix.copy(src, dest));
|
|
// Copy task for form validation plugin as premium plugin don't have npm package
|
|
mixAssetsDir('vendor/libs/formvalidation/dist', (src, dest) => mix.copyDirectory(src, dest));
|
|
|
|
// Fonts
|
|
mixAssetsDir('vendor/fonts/*/*', (src, dest) => mix.copy(src, dest));
|
|
mixAssetsDir('vendor/fonts/!(_)*.scss', (src, dest) =>
|
|
mix.sass(src, dest.replace(/(\\|\/)scss(\\|\/)/, '$1css$2').replace(/\.scss$/, '.css'), { sassOptions })
|
|
);
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Application assets
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
mixAssetsDir('js/**/*.js', (src, dest) => mix.scripts(src, dest));
|
|
mixAssetsDir('css/**/*.css', (src, dest) => mix.copy(src, dest));
|
|
|
|
mix.copy('node_modules/boxicons/fonts/*', 'public/assets/vendor/fonts/boxicons');
|
|
|
|
mix.version();
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Browsersync Reloading
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| BrowserSync can automatically monitor your files for changes, and inject your changes into the browser without requiring a manual refresh.
|
|
| You may enable support for this by calling the mix.browserSync() method:
|
|
| Make Sure to run `php artisan serve` and `yarn watch` command to run Browser Sync functionality
|
|
| Refer official documentation for more information: https://laravel.com/docs/9.x/mix#browsersync-reloading
|
|
*/
|
|
|
|
mix.browserSync('http://127.0.0.1:8000/');
|