跳转到主要内容

Cloudflare Environments

import { PackageManagers, Render, WranglerConfig } from "~/components";

A Worker config file may contain configuration for multiple Cloudflare environments. With the Cloudflare Vite plugin, you select a Cloudflare environment at dev or build time by providing the CLOUDFLARE_ENV environment variable. Consider the following example Worker config file:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-worker",
	"compatibility_date": "$today",
	"main": "./src/index.ts",
	"upload_source_maps": true,
	"vars": {
		"MY_VAR": "Top-level var"
	},
	"env": {
		"staging": {
			"vars": {
				"MY_VAR": "Staging var"
			}
		},
		"production": {
			"vars": {
				"MY_VAR": "Production var"
			}
		}
	}
}

If you run CLOUDFLARE_ENV=production vite build then the output wrangler.json file generated by the build will be a flattened configuration for the 'production' Cloudflare environment, as shown in the following example:

{
	"name": "my-worker",
	"compatibility_date": "2025-04-03",
	"main": "index.js",
	"upload_source_maps": true,
	"vars": { "MY_VAR": "Production var" }
}

Notice that the value of MY_VAR is Production var. This flattened configuration combines top-level only, inheritable, and non-inheritable keys.

:::note The default Vite environment name for a Worker is always the top-level Worker name. This enables you to reference the Worker consistently in your Vite config when using multiple Cloudflare environments. See Vite Environments for more information. :::

Cloudflare environments can also be used in development. For example, you could run CLOUDFLARE_ENV=development vite dev. It is common to use the default top-level environment as the development environment and then add additional environments as necessary.

:::note Running vite dev or vite build without providing CLOUDFLARE_ENV will use the default top-level Cloudflare environment. As Cloudflare environments are applied at dev and build time, specifying CLOUDFLARE_ENV when running vite preview or wrangler deploy will have no effect. :::

Secrets in local development

Combining Cloudflare environments and Vite modes

You may wish to combine the concepts of Cloudflare environments and Vite modes. With this approach, the Vite mode can be used to select the Cloudflare environment and a single method can be used to determine environment specific configuration and code. Consider again the previous example:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-worker",
	"compatibility_date": "$today",
	"main": "./src/index.ts",
	"upload_source_maps": true,
	"vars": {
		"MY_VAR": "Top-level var"
	},
	"env": {
		"staging": {
			"vars": {
				"MY_VAR": "Staging var"
			}
		},
		"production": {
			"vars": {
				"MY_VAR": "Production var"
			}
		}
	}
}

Next, provide .env.staging and .env.production files:

CLOUDFLARE_ENV=staging
CLOUDFLARE_ENV=production

By default, vite build uses the 'production' Vite mode. Vite will therefore load the .env.production file to get the environment variables that are used in the build. Since the .env.production file contains CLOUDFLARE_ENV=production, the Cloudflare Vite plugin will select the 'production' Cloudflare environment. The value of MY_VAR will therefore be 'Production var'. If you run vite build --mode staging then the 'staging' Vite mode will be used and the 'staging' Cloudflare environment will be selected. The value of MY_VAR will therefore be 'Staging var'.

For more information about using .env files with Vite, see the relevant documentation.