Vite build "[rollup] Could not resolve import" (external) in CI
During vite build, Rollup could not resolve an import. Either the package is missing, the path is wrong, or it is a Node built-in that should be marked external rather than bundled.
What this error means
A vite build aborts with [rollup] Could not resolve "x" from .... The dev server worked because Vite resolves differently from the production Rollup bundle.
[vite]: Rollup failed to resolve import "fs" from "src/loader.ts".
This is most likely unintended because it can break your application
at runtime.Common causes
A missing dependency or wrong path
The imported package is not installed, or the relative path does not exist in the build context. The dev server tolerated it; the build does not.
A Node built-in being bundled for the browser
A fs/path-style import pulled into a browser bundle has no resolution. It must be externalized or removed for client builds.
How to fix it
Install the dependency or fix the path
Add the missing package, or correct the import path so Rollup can resolve it.
- Confirm the package is in package.json and the lockfile.
- Check the relative path exists in the build context.
- Run
npm ci && vite buildon a clean checkout to verify.
Mark legitimate externals
For Node built-ins or deps that should not be bundled, declare them external in the Rollup options.
// vite.config.ts
export default {
build: {
rollupOptions: { external: ['fs', 'path'] },
},
};How to prevent it
- Run the production build (not just dev) in CI to catch resolution gaps.
- Keep dependencies declared in package.json, not relied on transitively.
- Keep Node-only code out of browser bundles.