Files
Tim NeutkensandGitHub c23d1a946c feat(turbopack): support import.meta.env (#96225)
## Summary

- add native Turbopack support for `import.meta.env.DEV`, `PROD`,
`MODE`, `BASE_URL`, and `SSR`
- statically analyze built-in values for dead-code elimination while
exposing the complete runtime object
- derive `BASE_URL` from the Next.js `basePath` and include
Vite-compatible trailing-slash formatting
- add TypeScript declarations, focused execution and Next.js integration
coverage, and Vite migration documentation

## Verification

- `cargo fmt --all -- --check`
- `cargo nextest run -p turbopack-tests -E 'test(import_meta_env)'`
- `pnpm build-all`
- `pnpm --filter=next types`
- `NEXT_TEST_PREFER_OFFLINE=1 pnpm test-dev-turbo
test/e2e/import-meta-env/import-meta-env.test.ts`
- `NEXT_TEST_PREFER_OFFLINE=1 pnpm test-start-turbo
test/e2e/import-meta-env/import-meta-env.test.ts`

<!-- NEXT_JS_LLM -->
2026-07-28 17:34:04 +00:00

32 lines
695 B
TypeScript

'use client'
import { useEffect, useState } from 'react'
const env = import.meta.env
const { DEV, PROD, MODE, BASE_URL, SSR } = env
const bracketMode = import.meta.env['MODE']
const unknown = (env as unknown as Record<string, unknown>).UNKNOWN
export function ClientEnv() {
const [mounted, setMounted] = useState(false)
useEffect(() => {
setMounted(true)
}, [])
if (!mounted) {
return <div id="client-env-pending" />
}
return (
<dl id="client-env">
<dt>env</dt>
<dd>{JSON.stringify({ DEV, PROD, MODE, BASE_URL, SSR })}</dd>
<dt>bracket-mode</dt>
<dd>{bracketMode}</dd>
<dt>unknown</dt>
<dd>{String(unknown)}</dd>
</dl>
)
}