From 6c7e1b3c5643aefc10e22a6d309f8678d2616d89 Mon Sep 17 00:00:00 2001 From: Jeremy Farrance Date: Sun, 5 Jan 2025 10:06:25 -0600 Subject: [PATCH 1/2] Adjusted to keep all webpack.* files folded --- ABBV20xx.code-workspace | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ABBV20xx.code-workspace b/ABBV20xx.code-workspace index 47ed9f8..f0b1b3d 100644 --- a/ABBV20xx.code-workspace +++ b/ABBV20xx.code-workspace @@ -70,7 +70,7 @@ }, "explorer.fileNesting.enabled": true, "explorer.fileNesting.patterns": { - "webpack.config.js": "webpack.*.config.js", + "webpack.config.js": "webpack.*.js", "*.code-workspace": ".env, .browserslistrc, .eslint*, .*.json, .git*, .editorconfig, .nvmrc, .*ignore, gulp*.js", "README.md": "READ*", } From 730c6f80e4c5915c1839ef88110a65c042ebbd68 Mon Sep 17 00:00:00 2001 From: Jeremy Farrance Date: Sun, 5 Jan 2025 10:07:08 -0600 Subject: [PATCH 2/2] Removed over-coded Entries and revised config (simpler) --- webpack.generateEntries.js | 34 ----------------- webpack.images.config.js | 76 +++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 73 deletions(-) delete mode 100644 webpack.generateEntries.js diff --git a/webpack.generateEntries.js b/webpack.generateEntries.js deleted file mode 100644 index 62edb81..0000000 --- a/webpack.generateEntries.js +++ /dev/null @@ -1,34 +0,0 @@ -import { resolve, relative, dirname } from 'path'; -import { globSync } from 'glob'; -import { fileURLToPath } from 'url'; -import path from 'path'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const generateEntries = () => { - const images = globSync('./src/media/images/**/*.{png,jpg,jpeg,gif}').reduce( - (acc, file) => { - const name = relative('./src/media/images', file).replace( - /\.[^/.]+$/, - '' - ); - acc[name] = resolve(__dirname, file); - return acc; - }, - {} - ); - - const svg = globSync('./src/media/svg/**/*.svg').reduce((acc, file) => { - const name = relative('./src/media/svg', file).replace(/\.[^/.]+$/, ''); - acc[name] = resolve(__dirname, file); - return acc; - }, {}); - - return { - ...images, - ...svg, - }; -}; - -export default generateEntries; diff --git a/webpack.images.config.js b/webpack.images.config.js index 1c45f9c..26b3edf 100644 --- a/webpack.images.config.js +++ b/webpack.images.config.js @@ -2,37 +2,40 @@ import { resolve } from 'path'; import ImageMinimizerPlugin from 'image-minimizer-webpack-plugin'; import { fileURLToPath } from 'url'; import path from 'path'; -import generateEntries from './webpack.generateEntries.js'; +import { globSync } from 'glob'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); -const entries = generateEntries(); - const dnnThemeDestPath = 'dnn/Portals/_default/Skins'; +// Get source files relative to src/media +const imageFiles = globSync('images/**/*.{png,jpg,jpeg,gif}', { cwd: './src/media' }).map(file => `./${file}`); +const svgFiles = globSync('svg/**/*.svg', { cwd: './src/media' }).map(file => `./${file}`); + export default { mode: 'production', - entry: entries, + context: resolve(__dirname, 'src/media'), + entry: [...imageFiles, ...svgFiles], output: { path: resolve(__dirname, dnnThemeDestPath, 'dist/media'), - filename: '[name][ext]', // Output filename pattern - assetModuleFilename: '[path][name][ext]', // Output asset filename pattern - clean: true, // Clean the output directory before emit + clean: true }, module: { - rules: [ - { - test: /\.(png|jpe?g|gif)$/i, - include: resolve(__dirname, 'src/media/images'), - type: 'asset/resource', // Use asset/resource for images - }, - { - test: /\.svg$/i, - include: resolve(__dirname, 'src/media/svg'), - type: 'asset/resource', // Use asset/resource for SVGs - }, - ], + rules: [{ + test: /\.(png|jpe?g|gif)$/i, + type: 'asset/resource', + generator: { + filename: '[path][name][ext]' + } + }, + { + test: /\.svg$/i, + type: 'asset/resource', + generator: { + filename: '[path][name][ext]' + } + }] }, plugins: [ new ImageMinimizerPlugin({ @@ -42,24 +45,19 @@ export default { plugins: [ ['mozjpeg', { quality: 75 }], ['pngquant', { quality: [0.6, 0.8] }], - [ - 'svgo', - { - plugins: [ - { - name: 'preset-default', - params: { - overrides: { - removeViewBox: false, - }, - }, - }, - ], - }, - ], - ], - }, - }, - }), - ], + ['svgo', { + plugins: [{ + name: 'preset-default', + params: { + overrides: { + removeViewBox: false + } + } + }] + }] + ] + } + } + }) + ] };