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

31 lines
764 B
TypeScript

import { ClientEnv } from './client-env'
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
if (!import.meta.env.SSR) {
require('this-server-only-package-does-not-exist')
}
if (import.meta.env.DEV && import.meta.env.PROD) {
require('this-impossible-package-does-not-exist')
}
export default function Page() {
return (
<main>
<dl id="server-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>
<ClientEnv />
</main>
)
}