This is a submission for DEV's Summer Bug Smash: Smash Stories powered by Sentry.
I'm building KingxTech, and specifically K-XpertAI β an AI agent that reads, writes, and deletes files in a live project workspace, then hosts the result instantly. Under the hood it's a React 19 + Vite frontend talking to a TypeScript/Express backend on Cloud Run.
I'd just shipped a big batch of changes to the workspace UI β a proper code editor, a file tree with GitHub import/export buttons, a terminal tab. Pushed to GitHub, Vercel kicked off the deploy... and it failed.
Error: Command "npm run build" exited with 1
Digging into the build log, the real error was buried a few lines down:
15 β import { File as FileIcon, Folder, FolderPlus, FilePlus, Trash2, Save,
β RefreshCw, Undo2, Copy, ExternalLink, Code2, Eye, Rocket,
β TerminalSquare, Upload, Maximize2, Minimize2, Github, FolderInput,
β SlidersHorizontal, Info, Plus } from "lucide-react";
β ββββ¬ββ
β β°ββββ Missing export
Vite's bundler (via Rolldown) was telling me Github
didn't exist as an export in lucide-react
β but only in Vercel's build. It worked fine in local dev. That's the kind of bug that makes you doubt your own eyes: the icon was clearly imported the same way as a dozen others on that same line that worked perfectly.
First instinct: check the installed version.
"lucide-react": "^1.23.0"
Nothing obviously wrong there. So instead of guessing at what icon names should exist, I installed that exact version in an isolated sandbox and just asked the module directly:
const icons = require('lucide-react');
const names = ['Github', 'FolderInput', 'SlidersHorizontal', /* ...the rest */];
for (const n of names) {
console.log(n, typeof icons[n] !== 'undefined' ? 'OK' : 'MISSING');
}
Github MISSING
FolderInput OK
SlidersHorizontal OK
...everything else OK
There it was. Every icon in that import worked except Github
.
lucide-react
β like a lot of modern icon libraries β has been progressively removing brand/trademark logos (GitHub, Twitter, etc.) from its default export set, pushing people toward dedicated brand-icon packages instead. Somewhere between versions, the plain Github
icon quietly stopped being exported. Local dev didn't catch it because of caching in node_modules
from an earlier install; a clean Vercel build (fresh npm install
every time) surfaced it immediately.
The fix wasn't "install a different package" β it was small enough to just inline:
// Before: relying on a brand icon that no longer ships
import { Github } from 'lucide-react';
// After: a tiny local SVG component instead
function Github({ size = 14 }) {
return (
<svg width={size} height={size} viewBox="0 0 24 24" fill="currentColor">
<path d="M12 .5C5.7.5.5 5.7.5 12c0 5.1 3.3 9.4 7.9 10.9..." />
</svg>
);
}
Same component name, same usage everywhere else in the file β zero call-site changes needed.
Since the whole failure was "works locally, fails in CI," I didn't trust a visual read of the diff. I ran the actual production build in a clean environment:
npm install
npm run build
β 1902 modules transformed.
dist/index.html 1.44 kB
dist/assets/index-*.css 24.68 kB
dist/assets/index-*.js 1,185.88 kB
β built in 3.16s
Clean exit code, real dist/
output. Only then did I consider it actually fixed.
node_modules
can hide exactly this class of bug. A clean install is the only honest test.Small bug, but a good reminder that "it built yesterday" is not evidence of anything today.