Переменные окружения — это механизм передачи конфигурационных данных в приложение без необходимости жестко кодировать их в исходном коде. В Fresh, как и во многих современных JavaScript-фреймворках, переменные окружения используются для хранения секретов, ключей API, конфигураций базы данных и других параметров, которые должны оставаться конфиденциальными или различаться между средами (development, staging, production).
Fresh использует возможности Deno для работы с окружением. Доступ к
переменным осуществляется через глобальный объект Deno.env.
Пример чтения переменной:
const apiKey = Deno.env.get("API_KEY");
console.log("API Key:", apiKey);
Ключевой момент: все переменные должны быть объявлены в окружении перед запуском приложения. Например, в UNIX-подобных системах:
export API_KEY="123456789"
deno run -A main.ts
Флаг -A (или --allow-env) необходим, так
как доступ к окружению в Deno по умолчанию запрещён из соображений
безопасности.
Для локальной разработки удобно хранить переменные в файле
.env. Fresh не имеет встроенной поддержки
.env, но можно использовать библиотеку
deno dotenv. Установка через URL модуля:
import "https://deno.land/x/dotenv/load.ts";
После этого все переменные из .env становятся доступны
через Deno.env.get:
API_KEY=123456789
DB_HOST=localhost
DB_PORT=5432
const dbHost = Deno.env.get("DB_HOST");
const dbPort = Deno.env.get("DB_PORT");
console.log(`Connecting to ${dbHost}:${dbPort}`);
-A или
--allow-env попытка чтения вызовет ошибку. Это
предотвращает случайную утечку секретов при запуске стороннего
кода.API_KEY и
api_key будут разными.Fresh использует маршрутизацию через страницы и API-роуты. Переменные окружения чаще всего применяются на серверной части для конфиденциальных данных:
// routes/api/data.ts
export async function handler(req) {
const secretToken = Deno.env.get("SECRET_TOKEN");
return new Response(JSON.stringify({ token: secretToken }), {
headers: { "Content-Type": "application/json" },
});
}
На клиентской стороне доступ к серверным переменным окружения напрямую невозможен. Если необходимо использовать данные в браузере, их нужно передавать через API или внедрять в HTML через SSR:
// routes/index.tsx
import { Handlers } from "$fresh/server.ts";
export const handler: Handlers = {
GET(_req, ctx) {
const publicKey = Deno.env.get("PUBLIC_KEY");
return ctx.render({ publicKey });
},
};
.env.development, .env.production,
.env.test. При запуске подгружается соответствующий
файл.DB_, API_, AUTH_.declare global {
namespace Deno {
interface Env {
API_KEY: string;
DB_HOST: string;
}
}
}
На платформах вроде Deno Deploy переменные окружения задаются через интерфейс управления. Важно помнить, что значения доступны только серверным роутам, а клиентский код не видит их напрямую. Это обеспечивает безопасность и упрощает конфигурацию без изменения кода приложения.
Использование переменных окружения в Fresh сочетает простоту доступа
через Deno.env с безопасной моделью разрешений, что
позволяет строить конфигурируемые приложения без риска случайного
раскрытия секретов.