From ce487da19ae37458634fd7f5f7a8ea9161f3d53d Mon Sep 17 00:00:00 2001 From: ignacionelson Date: Mon, 24 Aug 2026 20:11:48 -0300 Subject: [PATCH] Keep other people's warnings out of our users' consoles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit React strips its own development warnings from a production build; several of our dependencies do not. Radix emits an accessibility warning for every dialog it considers underdescribed, and it was reaching anyone who opened devtools on a real installation — advice aimed at whoever builds the software, shown to whoever uses it. console.error is deliberately left in. Something has genuinely gone wrong when it fires, and a support conversation that opens with a real stack trace is worth more than a tidy console. Only the advisory levels are dropped, and only from production: npm run dev still shows everything, which is where those warnings are useful. The bundle goes from 12 console.log and 18 console.warn to none and two — the survivors being a Recharts truthiness guard and Uppy's logger object, neither of which speaks unless asked. What this does not do is fix what Radix was complaining about: sixteen of twenty-three dialogs have no description, which is a real accessibility gap and its own piece of work. --- vite.config.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/vite.config.js b/vite.config.js index c0ca3647..fce5bf57 100644 --- a/vite.config.js +++ b/vite.config.js @@ -5,7 +5,7 @@ import { } from 'vite'; import tailwindcss from "@tailwindcss/vite"; -export default defineConfig({ +export default defineConfig(({ mode }) => ({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.tsx'], @@ -17,6 +17,25 @@ export default defineConfig({ ], esbuild: { jsx: 'automatic', + + // Keep other people's development warnings out of our users' + // consoles. React strips its own from a production build; several + // of our dependencies do not — Radix emits an accessibility + // warning on every dialog it considers underdescribed, and it + // reaches anyone who opens devtools on a real installation. A + // warning aimed at whoever is building the software is noise to + // whoever is using it, and noise is where real errors go to hide. + // + // console.error is deliberately NOT in this list. Something has + // genuinely gone wrong when it fires, and a support conversation + // that starts with a real stack trace is worth more than a tidy + // console. This only strips the levels that are advisory. + // + // Development is untouched: `npm run dev` still shows everything, + // which is where those warnings are actually useful. + pure: mode === 'production' + ? ['console.log', 'console.warn', 'console.info', 'console.debug', 'console.trace'] + : [], }, resolve: { // Package pages (packages/*/resources/js) are loaded through a @@ -28,4 +47,4 @@ export default defineConfig({ // path instead, whose ancestry does. preserveSymlinks: true, }, -}); \ No newline at end of file +})); \ No newline at end of file