Environment Variables
ุฅู Create-T3-App
ุชุณุชุฎุฏู
Zodโ ููุชุฃูุฏ ู
ู ุตูุงุญูุฉ ุงูู environment variables ุฃุซูุงุก ุงูู runtime ุนู ุทุฑูู ุชูููุฑ ุจุนุถ ุงูู
ููุงุช ุงูุงุถุงูุฉ
๐ src/env
โซ ๐ client.mjs
โซ ๐ schema.mjs
โซ ๐ server.mjs
ูุฏ ูุจุฏู ู ุญุชูู ูุฐู ุงูู ููุงุช ู ุฎูููุง ูููููุฉ ุงูุฃููู ุ ููู ูุง ุชููู ุ ููู ููุณ ู ุนูุฏูุง ูู ุง ูุจุฏู. ุฏุนูุง ูููู ูุธุฑุฉ ุนูููุง ูุงุญุฏุฉ ุชูู ุงูุฃุฎุฑู ุ ููุณูุฑ ุฎูุงู ุนู ููุฉ ุฅุถุงูุฉ environment variables ุฅุถุงููุฉ.
ุฅุฐุง ููุช ุชุฑูุฏ ุฅุถุงูุฉ environment variable ุฌุฏูุฏ ุ ููุฌุจ ุนููู ุฅุถุงูุชู ุฅูู ูู ู
ู โ.envโ ููุฐูู ูู env / schema.mjs
._
ู ูู schema.mjs
ูุฐุง ูู ุงูู ูู ุงูุฐู ุณุชุนู ู ุนููุฉ. ููุญุชูู ุนูู ู ูุฎุทุทูู ุ ุฃุญุฏูู ุง environment variables ู ู ุฌุงูุจ ุงูุฎุงุฏู ูุงูุขุฎุฑ ู ู ุฌุงูุจ ุงูุนู ูู ุจุงูุฅุถุงูุฉ ุฅูู Object ุงูู โclientEnvโ.
export const serverSchema = z.object({
// DATABASE_URL: z.string().url(),
});
export const serverEnv = {
// DATABASE_URL: process.env.DATABASE_URL,
};
export const clientSchema = z.object({
// NEXT_PUBLIC_WS_KEY: z.string(),
});
export const clientEnv = {
// NEXT_PUBLIC_WS_KEY: process.env.NEXT_PUBLIC_WS_KEY,
};
ุงูู Server Schema
ุฃูุดุฆ ุงูู environment variables schema ู
ู ุฌุงูุจ ุงูุฎุงุฏู
ููุง.
ุชุฃูุฏ ุฃู ูุง ุชุถูู NEXT_PUBLIC
ูุจู ุงุณู
ุงูู
ุชุบูุฑุ ุณููุดู ุงูู Validation ุฅุฐุง ู
ุง ูุนูุช ูุฐุง.
ุงูู Client Schema
ุฃูุดุฆ ุงูู client-side environment variables ููุงุ ุญุชู ุชุฌุนููู
ู
ุชุงุญูุช ููู client ุฃุถู NEXT_PUBLIC
ูุจู ุงูุงุณู
.
ุงูู clientEnv Object
ูููุง ุญูุซู ุชููู
ุจุนู
ู Destruct ูู process.env
ุชุญุชุงุฌ Zod ุงูู Object ูุชููู ูุงุฏุฑุฉ ุนูู ุชุตุญูุญ ุงูู
ูุฏุฎูุงุช ูุจุณุจุจ ุทุฑููุฉ ุนู
ู Next.js ููู ูุณุชุทูุน ูุนู ูุฐุง ุชููุงุฆูุง ูุฐูู ูุฌุจ ุฃู ุชุชู
ูุฐุฉ ุงูุนู
ููุฉ ูุฏููุงุ ูุง ุชููู ูู Typescript ุชููู
ุจุชุญุฐูุฑู ุฅุฐุง ุงุฑุชูุจุช ุฎุทุงู.
// โ This doesn't work, we need to destruct it manually
const schema = z.object({
NEXT_PUBLIC_WS_KEY: z.string(),
});
const validated = schema.parse(process.env);
ุงูู server.mjs & client.mjs
ูุฐุง ูู ุงูู ูุงู ุงูุฐู ูุชู ููู ุงูุชุญูู ู ู ุงูู Object ูู ู ุซู ุชุตุฏูุฑูุง. ูู ุชุญุชุงุฌ ุฅูู ุชุนุฏูู ูุฐู ุงูู ููุงุช.
ุฅุณุชุฎุฏุงู ุงูู Environment Variables
ุฅุฐุง ุฃุฑุฏุช ุฅุณุชุฎุฏุงู
ุงูู env vars ููู
ููู ุฅุณุชูุฑุงุฏ env.js
ูุงุณุชุนู
ุงููู
ุทุจูุนูุง. ุฅุฐุง ุฅุณุชูุฑุงุฏุช ุงูู
ูู ูู Client ูุญููุช ุงุณุชุนู
ุงู ููู
ุงูserver-sideุ ุณุชูุฐุฑ ุจูุฌูุฏ ุฎุทุฃ ูู run-time.
import { env } from "../../env.js";
// `env` is fully typesafe and provides autocompletion
const dbUrl = env.DATABASE_URL;
ุงูู .env.example
ุจู
ุง ุฃู ู
ูู .env
ููุณ ู
ูุถู
ูุงู ูู ุงูู version controlุ ููุฏ ุฃุถููุง ู
ูู .env.example
ูุงูุฐู ูู
ููู ุฃู ุชุชุฑููุ ูุฃุถูุงูู ููุตุญู ุฃู ุชูุจูู ูุฐุง ุงูู
ูู ู
ุชุฒุงู
ูุง ู
ุน ุงูู
ูู ุงูุงุณุงุณู ุญุชู ุชุญุตู ุนูู ุฃูุถู ุชุฌุฑุจุฉ ุชุทููุฑ ู
ู
ููุฉ
ุฃุถู Environment Variables
ุญุชู ูุชุฃูุฏ ู ู ุฃูู ุณุชุถูู ุงูู environment variablesุ ูุฌุจ ุนููู ุฃู ุชุถูููุง ูู ู ูุงููู ู ุฎุชูููู
๐ ู
ูู .env
: ููุง ูุถูู ุงูู
ุชุบูุฑุงุช ุจุดูู ุทุจูุนู ูุงูู ุชุชุนุงู
ู ู
ุน ู
ูู .env
ุนุงุฏู
๐ ู
ูู schema.mjs
: ููุง ุชุถูู ุงูู Logic ุงูุชู ุณุชุณุชุฎุฏู
ุฉ Zod ููุญุต ุตูุงุญูุฉ ุงูู
ุชุบูุฑุงุช
๐ ู
ูู .env.example
: ููุง ุชุถูู ุงูู
ุชุบูุฑุงุช ููู ุจุฏูู ุฃู ููู
ุงุช ุณุฑูุฉ ููุญูุงุธ ุนูู ุฃู
ุงูู
ุฃู ุซูุฉ
- ุฃุถู the environment variable ุงูู
.env
:
TWITTER_API_TOKEN=1234567890
- ุฃุถู environment variable to
schema.mjs
:
export const serverSchema = z.object({
// ...
TWITTER_API_TOKEN: z.string(),
});
export const serverEnv = {
// ...
TWITTER_API_TOKEN: process.env.TWITTER_API_TOKEN,
};
ู
ูุญูุทุฉ: ุฃุถู ุฅุณู
ุงูู
ูุชุบููุฑ TWITTER_API_TOKEN
ูู example.env ูููู ูุง ุชูุถู ุงูู token
TWITTER_API_TOKEN=