Keep other people's warnings out of our users' consoles

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.
This commit is contained in:
ignacionelson
2026-08-24 20:11:48 -03:00
parent a86017f2c2
commit ce487da19a
+21 -2
View File
@@ -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,
},
});
}));