|
Server : Apache System : Linux s1230 5.15.0-139-generic #149~20.04.1 SMP Tue Jul 14 11:21:49 UTC 2026 x86_64 User : p141464 ( 418825) PHP Version : 7.4.33.12 Disable Function : NONE Directory : /html/relaunch-kmu/wp-content/plugins/wp-gdpr-compliance/webpack/ |
Upload File : |
const paths = require('./paths')
const glob = require('glob')
const path = require('path')
const ESLintPlugin = require('eslint-webpack-plugin')
const CopyPlugin = require('copy-webpack-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const RemovePlugin = require('remove-files-webpack-plugin')
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin')
const StylelintPlugin = require('stylelint-webpack-plugin')
const PurgecssPlugin = require('purgecss-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
/**
* Generating stylesheets
* --------------------------------------------------------------------------------
* All .scss files that need to generate a .css file have their own entry inside
* the entry object inside the Webpack configuration. Chunk names should always be
* in snake case and start with 'styles'.
*
* Examples output based on chunk names:
*
* styles_style => style.css
* styles_style_context => style.context.css
*/
module.exports = {
entry: {
front: paths.src.js + '/front.js',
admin: paths.src.js + '/admin.js',
// style entries
styles_admin: paths.src.scss + '/admin.scss',
styles_front: paths.src.scss + '/front.scss',
// assets
assets_icons: paths.src.jsConfig + '/sprite.js'
},
output: {
clean: true,
filename: '[name].min.js',
path: paths.dist.js
},
module: {
rules: [
{
test: /\.scss$/i,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [['postcss-preset-env']]
}
}
},
{
loader: 'sass-loader',
options: {
sassOptions: {
includePaths: ['./node_modules/normalize.css', './node_modules/sass-mq'],
quietDeps: true
}
}
}
]
},
{
test: /\.js$/,
use: ['babel-loader'],
exclude: /node_modules/
},
{
test: /\.svg$/,
include: [paths.src.fontAwesomeFree, paths.src.fontAwesomePro, paths.src.svg],
use: [
{
loader: 'svg-sprite-loader',
options: {
extract: true,
spriteFilename: path => {
const pathArr = path.split('/')
const isFontAwesomeFree = path.indexOf('fontawesome-free') !== -1
const isFontAwesomePro = path.indexOf('fontawesome-pro') !== -1
let folder = pathArr[pathArr.length - 2]
if (isFontAwesomeFree) {
folder = `fontawesome-free-${folder}`
}
if (isFontAwesomePro) {
folder = `fontawesome-pro-${folder}`
}
return `../icons/sprite-${folder}.svg` // relative to output.path
}
}
},
'svgo-loader'
]
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
exclude: [paths.src.fontAwesomeFree, paths.src.fontAwesomePro, paths.src.svg],
use: [
{
loader: 'file-loader',
options: {
outputPath: '../img',
name: '[name].[ext]'
}
}
]
}
]
},
plugins: [
new ESLintPlugin({
files: ['.', 'src', 'config'],
formatter: 'table',
exclude: ['node_modules', 'Resources/js/utils/postscribe/*']
}),
new CopyPlugin({
patterns: [
{
from: paths.src.svg,
to: '../svg/'
}
]
}),
new MiniCssExtractPlugin({
filename ({ chunk }) {
const parts = chunk.name.split('_')
parts.shift()
const name = parts.length > 1 ? parts.join('.') : parts[0]
// returned path is relative to paths.dist.js
return `../css/${name}.css`
}
}),
new RemovePlugin({
before: {
test: [
{
folder: 'Assets',
method: path => path,
recursive: true
}
]
},
after: {
test: [
{
folder: 'Assets',
method: path => {
const file = path.split('/').pop()
return file.startsWith('styles_') || file.startsWith('lang_') || file.startsWith('assets_')
},
recursive: true
}
]
}
}),
new SpriteLoaderPlugin({
plainSprite: true
}),
new StylelintPlugin({
extensions: ['scss']
}),
new PurgecssPlugin({
paths: [].concat.apply([], [
'./../WordPress/**/*.php',
'./../Templates/**/*.php',
'./../Resources/**/*.js'
].map(x => glob.sync(path.resolve(__dirname, x))))
})
],
optimization: {
minimize: true,
minimizer: [new CssMinimizerPlugin(), new TerserPlugin()]
},
resolve: {
alias: {
'@fa-free-svg': paths.src.fontAwesomeFree,
'@fa-pro-svg': paths.src.fontAwesomePro,
'@vo-fonts': paths.src.fonts,
'@vo-js': paths.src.js,
'@vo-languages': paths.src.languages,
'@vo-scss': paths.src.scss
}
}
}