[GH-ISSUE #585] SSR dev server fails with "module is not defined" for CJS dependencies (void-elements, highlight.js, etc.) #127

Open
opened 2026-05-06 12:37:26 +02:00 by BreizhHardware · 0 comments

Originally created by @ThyeeZz on GitHub (Mar 19, 2026).
Original GitHub issue: https://github.com/cloudflare/vinext/issues/585

Description

When migrating a Next.js Pages Router project to vinext, vinext dev fails with 500 Internal Server Error because Vite 8's ESModulesEvaluator cannot handle CommonJS dependencies that use module.exports.

Reproduction

  1. A Next.js project with common CJS dependencies (e.g. react-i18nexthtml-parse-stringifyvoid-elements, or highlight.js)
  2. Run npx vinext init then npx vinext dev
  3. Visit http://localhost:3000/

Error

Error when evaluating SSR module /src/pages/index.tsx: module is not defined
at eval (node_modules/void-elements/index.js:8:1)
at ESModulesEvaluator.runInlinedModule (vite/dist/node/module-runner.js:988:161)

ReferenceError: module is not defined
at node_modules/void-elements/index.js:6:1

After externaling void-elements, the same error occurs for highlight.js/lib/core.js, and so on for other CJS-only packages.

Attempted workarounds

Config Result
ssr.noExternal: ['void-elements', ...] Same error, CJS not transformed
ssr.noExternal: true Same error
ssr.external: ['void-elements', ...] Fixes that package, but next CJS dep fails (whack-a-mole)
ssr.external: true Even react itself gets externalized and fails
ssr.external: [/node_modules/] Vite 8 rejects RegExp: Value is non of these types True, Array<T>

Root cause

Vite 8's ESModulesEvaluator (used by SSRCompatModuleRunner) runs module code in strict ESM scope where module is not defined. CJS packages that use module.exports = ... fail immediately. Vite's CJS→ESM transform doesn't seem to kick in
for these dependencies during SSR dev.

Environment

  • Node.js: v22.22.1
  • vinext: 0.0.31
  • Vite: 8.0.1
  • Package manager: pnpm 10.32.1
  • OS: macOS (darwin-arm64)

Affected packages (partial list)

  • void-elements (via react-i18nexthtml-parse-stringify)
  • highlight.js
  • react itself (react/index.js uses module.exports)
  • Many others — most npm packages still ship CJS

Expected behavior

vinext should handle CJS dependencies transparently in SSR dev mode, similar to how Next.js webpack does.

Originally created by @ThyeeZz on GitHub (Mar 19, 2026). Original GitHub issue: https://github.com/cloudflare/vinext/issues/585 ## Description When migrating a Next.js Pages Router project to vinext, `vinext dev` fails with `500 Internal Server Error` because Vite 8's `ESModulesEvaluator` cannot handle CommonJS dependencies that use `module.exports`. ## Reproduction 1. A Next.js project with common CJS dependencies (e.g. `react-i18next` → `html-parse-stringify` → `void-elements`, or `highlight.js`) 2. Run `npx vinext init` then `npx vinext dev` 3. Visit `http://localhost:3000/` ## Error Error when evaluating SSR module /src/pages/index.tsx: module is not defined at eval (node_modules/void-elements/index.js:8:1) at ESModulesEvaluator.runInlinedModule (vite/dist/node/module-runner.js:988:161) ReferenceError: module is not defined at node_modules/void-elements/index.js:6:1 After externaling `void-elements`, the same error occurs for `highlight.js/lib/core.js`, and so on for other CJS-only packages. ## Attempted workarounds | Config | Result | |---|---| | `ssr.noExternal: ['void-elements', ...]` | Same error, CJS not transformed | | `ssr.noExternal: true` | Same error | | `ssr.external: ['void-elements', ...]` | Fixes that package, but next CJS dep fails (whack-a-mole) | | `ssr.external: true` | Even `react` itself gets externalized and fails | | `ssr.external: [/node_modules/]` | Vite 8 rejects RegExp: `Value is non of these types True, Array<T>` | ## Root cause Vite 8's `ESModulesEvaluator` (used by `SSRCompatModuleRunner`) runs module code in strict ESM scope where `module` is not defined. CJS packages that use `module.exports = ...` fail immediately. Vite's CJS→ESM transform doesn't seem to kick in for these dependencies during SSR dev. ## Environment - Node.js: v22.22.1 - vinext: 0.0.31 - Vite: 8.0.1 - Package manager: pnpm 10.32.1 - OS: macOS (darwin-arm64) ## Affected packages (partial list) - `void-elements` (via `react-i18next` → `html-parse-stringify`) - `highlight.js` - `react` itself (`react/index.js` uses `module.exports`) - Many others — most npm packages still ship CJS ## Expected behavior vinext should handle CJS dependencies transparently in SSR dev mode, similar to how Next.js webpack does.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/vinext#127
No description provided.