From 447e72b16e82868e735e61bf83359ec63fc6aeb3 Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Mon, 29 May 2023 12:44:29 +0100 Subject: [PATCH] refactor: Add CSS extraction for production build - Add `mini-css-extract-plugin` to `devDependencies` - Optimize production builds with `MiniCssExtractPlugin` - Improve CSS webpack rules for production and development builds --- package-lock.json | 29 +++++++++++++++ package.json | 1 + public/assets/app.css | 1 + public/assets/app.css.br | Bin 0 -> 963 bytes public/assets/app.js | 1 - public/assets/app.js.br | Bin 3842 -> 16694 bytes webpack.config.js | 74 +++++++++++++++++++++++++++------------ 7 files changed, 82 insertions(+), 24 deletions(-) create mode 100644 public/assets/app.css create mode 100644 public/assets/app.css.br diff --git a/package-lock.json b/package-lock.json index 16b9a4de..75033586 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "cssnano": "^6.0.1", "eslint": "^8.41.0", "eslint-webpack-plugin": "^4.0.1", + "mini-css-extract-plugin": "^2.7.6", "postcss": "^8.4.24", "postcss-combine-duplicated-selectors": "^10.0.2", "postcss-combine-media-query": "^1.0.1", @@ -4956,6 +4957,25 @@ "node": ">=4" } }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -10893,6 +10913,15 @@ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, + "mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", diff --git a/package.json b/package.json index e97174d5..987c3d5b 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "cssnano": "^6.0.1", "eslint": "^8.41.0", "eslint-webpack-plugin": "^4.0.1", + "mini-css-extract-plugin": "^2.7.6", "postcss": "^8.4.24", "postcss-combine-duplicated-selectors": "^10.0.2", "postcss-combine-media-query": "^1.0.1", diff --git a/public/assets/app.css b/public/assets/app.css new file mode 100644 index 00000000..71e197ea --- /dev/null +++ b/public/assets/app.css @@ -0,0 +1 @@ +:root{--font-family-headings:"Archer SSm A","Archer SSm B",serif;--font-family-body:"Verlag A","Verlag B",sans-serif;--font-family-monospace:"Operator Mono SSm A","Operator Mono SSm B",monospace;--font-size-sm:0.75rem;--font-size-base:1rem;--font-size-md:1.25rem;--font-size-lg:1.5rem;--font-size-xl:1.75rem;--font-size-xxl:2rem;--font-size-xxxl:2.25rem;--color-primary:#334700;--color-secondary:#e3ffb7;--color-link:#00649e;--color-link-visited:#bc7aff;--color-primary-shadow:rgba(16,25,0,.4)}@supports (color:color(display-p3 0 0 0)){:root{--color-primary:color(display-p3 0.21567 0.27838 0.03615);--color-secondary:color(display-p3 0.91016 0.99842 0.74082);--color-link:color(display-p3 0.01045 0.38351 0.63618);--color-link-visited:color(display-p3 0.70467 0.47549 0.99958);--color-primary-shadow:color(display-p3 0.06762 0.09646 0.00441/0.4)}}@supports (color:oklch(0% 0 0)){:root{--color-primary:oklch(36.8% 0.1 125.505);--color-secondary:oklch(96.3% 0.1 125.505);--color-link:oklch(48.09% 0.146 241.41);--color-link-visited:oklch(70.44% 0.21 304.41);--color-primary-shadow:oklch(19.56% 0.054 125.505/40%)}}body{background-color:var(--color-secondary);color:var(--color-primary);font-family:var(--font-family-body);font-size:var(--font-size-md)}code{font-family:var(--font-family-monospace)}h1,h2,h3,h4,h5,h6{font-family:var(--font-family-headings)}.grid{display:grid;grid-template-columns:5vw 1fr 5vw;grid-template-rows:-webkit-min-content 1fr -webkit-min-content;grid-template-rows:min-content 1fr min-content;row-gap:1rem}#site-header{grid-column:2/3;grid-row:1/2}main{grid-row:2/3}footer,main{grid-column:2/3}footer{grid-row:3/4}footer .iwc-logo{max-width:85vw}a{color:var(--color-link)}a:visited{color:var(--color-link-visited)}#site-header a:visited{color:var(--color-link)}.hljs{border-radius:.5rem}.p-bridgy-twitter-content{display:none}.h-card .hovercard{-webkit-box-orient:vertical;-webkit-box-direction:normal;background-color:var(--color-secondary);border-radius:1rem;-webkit-box-shadow:0 .5rem .5rem .5rem var(--color-primary-shadow);box-shadow:0 .5rem .5rem .5rem var(--color-primary-shadow);display:none;-ms-flex-direction:column;flex-direction:column;gap:.5rem;opacity:0;padding:1rem;position:absolute;-webkit-transition:opacity .5s ease-in-out;transition:opacity .5s ease-in-out;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;z-index:100}.h-card .hovercard .u-photo{max-width:6rem}.h-card .hovercard .social-icon{height:1rem;width:1rem}.h-card:hover .hovercard{display:-webkit-box;display:-ms-flexbox;display:flex;opacity:1}.h-entry{-webkit-border-start:1px solid var(--color-primary);-webkit-padding-start:.5rem;border-inline-start:1px solid var(--color-primary);padding-inline-start:.5rem}.h-entry .reply-to{font-style:italic}.h-entry .post-info a{text-decoration:none}.h-entry .note-metadata{-webkit-box-orient:horizontal;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;gap:1rem}.h-entry .note-metadata .syndication-links{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.h-entry .note-metadata .syndication-links a{text-decoration:none}.h-entry .note-metadata .syndication-links a svg{height:1rem;width:1rem} diff --git a/public/assets/app.css.br b/public/assets/app.css.br new file mode 100644 index 0000000000000000000000000000000000000000..f38bc392f07b926686758d024c9952e0b4da0501 GIT binary patch literal 963 zcmV;!13dg2(+mKN!g24SC~b%#;=n~^sV)0&stuo|%oD7`eJbkrh!PcWDN4{*CRKcu zIG2Z18MTM#KsDIQXtIdWO}t;37f>Uv!oE(lierCAk`!*5og;njEFwDG7U>5&iDP@T zX8jC*C%$;hYmIAM%lg87Wb+xX$?zfTiOLk36=ApULRs1Hd2=L7L>XC!tE;Vxh9%>| zhdlk%5X`E2+O=RgS}(lIk_sd|0&5EfY02h7iDeNKJS*@DpPHEoJ{);B3}vMru9@^) z0(UM1GShzWM^Of;hm)|?1_v#r$M*;~)Q~_>Vk@QzLl9__)82w0?" ".concat(o[5]):""," {")),r+=n(o),e&&(r+="}"),o[2]&&(r+="}"),o[4]&&(r+="}"),r})).join("")},o.i=function(n,r,e,t,i){"string"==typeof n&&(n=[[null,n,void 0]]);var a={};if(e)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=i),r&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=r):l[2]=r),t&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=t):l[4]="".concat(t)),o.push(l))}},o}},537:function(n){n.exports=function(n){var o=n[1],r=n[3];if(!r)return o;if("function"==typeof btoa){var e=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),t="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(e),i="/*# ".concat(t," */");return[o].concat([i]).join("\n")}return[o].join("\n")}},379:function(n){var o=[];function r(n){for(var r=-1,e=0;e0?" ".concat(r.layer):""," {")),e+=r.css,t&&(e+="}"),r.media&&(e+="}"),r.supports&&(e+="}");var i=r.sourceMap;i&&"undefined"!=typeof btoa&&(e+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),o.styleTagTransform(e,n,o.options)}(o,n,r)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(o)}}}},589:function(n){n.exports=function(n,o){if(o.styleSheet)o.styleSheet.cssText=n;else{for(;o.firstChild;)o.removeChild(o.firstChild);o.appendChild(document.createTextNode(n))}}}},f={};function u(n){var o=f[n];if(void 0!==o)return o.exports;var r=f[n]={id:n,exports:{}};return p[n](r,r.exports,u),r.exports}u.n=function(n){var o=n&&n.__esModule?function(){return n.default}:function(){return n};return u.d(o,{a:o}),o},u.d=function(n,o){for(var r in o)u.o(o,r)&&!u.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:o[r]})},u.o=function(n,o){return Object.prototype.hasOwnProperty.call(n,o)},u.nc=void 0,n=u(379),o=u.n(n),r=u(795),e=u.n(r),t=u(569),i=u.n(t),a=u(565),s=u.n(a),c=u(216),A=u.n(c),l=u(589),C=u.n(l),d=u(661),(m={}).styleTagTransform=C(),m.setAttributes=s(),m.insert=i().bind(null,"head"),m.domAPI=e(),m.insertStyleElement=A(),o()(d.Z,m),d.Z&&d.Z.locals&&d.Z.locals}(); \ No newline at end of file diff --git a/public/assets/app.js.br b/public/assets/app.js.br index 824c5747de1d87a39965e86c5215177a966bb81c..961f6a0332b68f0ba0ac53e20328d3e031234540 100644 GIT binary patch literal 16694 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 R8e;2DXua;S~WRTx_v&s*^A5=miXn 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 E0vacCOaK4? diff --git a/webpack.config.js b/webpack.config.js index 703b543a..447c6d42 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -3,6 +3,7 @@ const StyleLintPlugin = require('stylelint-webpack-plugin'); const CompressionPlugin = require('compression-webpack-plugin'); const zlib = require('zlib'); const EslintPlugin = require('eslint-webpack-plugin'); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const config = { entry: ['./resources/js/app.js'], @@ -12,29 +13,6 @@ const config = { }, module: { rules: [{ - test: /\.css$/, - exclude: /node_modules/, - use: [ - { - loader: 'style-loader' - }, - { - loader: 'css-loader', - options: { - sourceMap: process.env.NODE_ENV !== 'production' - } - }, - { - loader: 'postcss-loader', - options: { - postcssOptions: { - config: path.resolve(__dirname, 'postcss.config.js'), - }, - sourceMap: process.env.NODE_ENV !== 'production' - } - } - ] - }, { test: /\.js$/, exclude: /node_modules/, use: { @@ -74,6 +52,56 @@ const config = { module.exports = (env, argv) => { if (argv.mode === 'development') { config.devtool = 'eval-source-map'; + + config.module.rules.push({ + test: /\.css$/, + exclude: /node_modules/, + use: [ + { + loader: 'style-loader' + }, + { + loader: 'css-loader', + options: { + sourceMap: true + } + }, + { + loader: 'postcss-loader', + options: { + postcssOptions: { + config: path.resolve(__dirname, 'postcss.config.js'), + }, + sourceMap: true + } + } + ] + }); + } + + if (argv.mode === 'production') { + config.module.rules.push({ + test: /\.css$/, + exclude: /node_modules/, + use: [ + { + loader: MiniCssExtractPlugin.loader, + }, + { + loader: 'css-loader', + }, + { + loader: 'postcss-loader', + options: { + postcssOptions: { + config: path.resolve(__dirname, 'postcss.config.js'), + }, + } + } + ] + }); + + config.plugins.push(new MiniCssExtractPlugin({filename: 'app.css'})); } return config;