File: /var/www/heifetz/heifetz-app/webpack.config.js
const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCssAssetWebpackPlugin = require('optimize-css-assets-webpack-plugin')
const TerserWebpackPlugin = require('terser-webpack-plugin')
const SVGSpritemapPlugin = require('svg-spritemap-webpack-plugin')
// const CopyPlugin = require('copy-webpack-plugin');
const isDev = process.env.NODE_ENV === 'development'
const isProd = !isDev
const optimization = () => {
const config = {}
if (isProd) {
config.minimizer = [
new OptimizeCssAssetWebpackPlugin(),
new TerserWebpackPlugin()
]
}
return config
}
const cssLoaders = extra => {
const loaders = [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '../'
}
},
'css-loader'
];
if (extra) {
loaders.push(extra)
}
return loaders;
}
const fileLoaderOptions = outputPath => {
return {
name: '[name].[ext]',
outputPath: outputPath
}
}
const plugins = () => {
return [
new MiniCssExtractPlugin({filename: 'css/main.css'}),
new SVGSpritemapPlugin('./src/img/icons/*.svg', {output: {filename: 'icons/sprite.svg'}}),
// new CopyPlugin({patterns: [{from: './src/images', to: 'images'}]})
]
}
module.exports = {
entry: './src/index.js',
output: {
filename: 'js/system/main.js',
path: path.resolve(__dirname, 'public/assets')
},
optimization: optimization(),
devtool: isDev ? 'source-map' : '',
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties']
}
}
},
{
test: /\.css$/,
use: cssLoaders()
},
{
test: /\.less$/,
use: cssLoaders('less-loader')
},
{
test: /\.(png|jpg|gif)$/,
loader: 'file-loader',
options: fileLoaderOptions('img')
},
{
test: /\.(ttf|woff|woff2|eot)$/,
loader: 'file-loader',
options: fileLoaderOptions('fonts')
},
{
test: /\.svg$/,
loader: 'file-loader',
exclude: '/img/icons/',
options: fileLoaderOptions((url, resourcePath, context) => {
if (/(glyphicons-halflings-regular|fontawesome-webfont|icomoon|icomoon2)/.test(resourcePath)) {
return `fonts/${url}`;
}
return `img/${url}`;
})
}
]
},
plugins: plugins()
}