aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/responsiveLoaderPlugin.ts73
1 files changed, 45 insertions, 28 deletions
diff --git a/src/plugins/responsiveLoaderPlugin.ts b/src/plugins/responsiveLoaderPlugin.ts
index 6334c4c..6975124 100644
--- a/src/plugins/responsiveLoaderPlugin.ts
+++ b/src/plugins/responsiveLoaderPlugin.ts
@@ -12,34 +12,51 @@ import sharp from 'responsive-loader/sharp';
12export default function responsiveLoaderPlugin(): Plugin { 12export default function responsiveLoaderPlugin(): Plugin {
13 return { 13 return {
14 name: 'marussy-responsive-loader-plugin', 14 name: 'marussy-responsive-loader-plugin',
15 configureWebpack: (_config, isServer) => ({ 15 configureWebpack: (config, isServer) => {
16 mergeStrategy: { 16 const rules = config.module?.rules ?? [];
17 'module.rules': 'prepend', 17 rules.forEach((rule) => {
18 }, 18 if (
19 // Configuration based on 19 typeof rule === 'object' &&
20 // https://github.com/dazuaz/responsive-loader/blob/ef2c806fcd36f06f6be8a0b97e09f40c3d86d3ac/README.md 20 'test' in rule &&
21 module: { 21 rule.test instanceof RegExp &&
22 rules: [ 22 rule.test.test('.svg') &&
23 { 23 typeof rule.oneOf?.[0] === 'object' &&
24 test: /\.(png|jpe?g)$/, 24 'use' in rule.oneOf[0]
25 resourceQuery: /[?&]rl$/, 25 ) {
26 use: [ 26 // Skip SVGR when importing SVG files with ?url.
27 { 27 rule.oneOf[0].resourceQuery = { not: /[?&]url$/ };
28 loader: 'responsive-loader', 28 }
29 options: { 29 });
30 adapter: sharp, 30 return {
31 format: 'webp', 31 mergeStrategy: {
32 // See 32 'module.rules': 'replace',
33 // https://github.com/facebook/docusaurus/blob/c745021b01a8b88d34e1d772278d7171ad8acdf5/packages/docusaurus-plugin-ideal-image/src/index.ts#L62-L66 33 },
34 emitFile: !isServer, 34 // Configuration based on
35 name: 'assets/images/[name].[hash:hex:7].[width].[ext]', 35 // https://github.com/dazuaz/responsive-loader/blob/ef2c806fcd36f06f6be8a0b97e09f40c3d86d3ac/README.md
36 module: {
37 rules: [
38 {
39 test: /\.(png|jpe?g)$/,
40 resourceQuery: /[?&]rl$/,
41 use: [
42 {
43 loader: 'responsive-loader',
44 options: {
45 adapter: sharp,
46 format: 'webp',
47 // See
48 // https://github.com/facebook/docusaurus/blob/c745021b01a8b88d34e1d772278d7171ad8acdf5/packages/docusaurus-plugin-ideal-image/src/index.ts#L62-L66
49 emitFile: !isServer,
50 name: 'assets/images/[name].[hash:hex:7].[width].[ext]',
51 },
36 }, 52 },
37 }, 53 ],
38 ], 54 type: 'javascript/auto',
39 type: 'javascript/auto', 55 },
40 }, 56 ...rules,
41 ], 57 ],
42 }, 58 },
43 }), 59 };
60 },
44 }; 61 };
45} 62}