У матеріалі Cloudflare Changelog описується оновлення Workers і CLI (Wrangler та cf), яке спрощує віддачу статичних файлів з URL-підшляху, наприклад /blog/, без зміни структури каталогу білду.
Завдання: віддати статичні файли з /blog, не перекладаючи їх у /blog всередині проєкту
Типовий сценарій, який розбирає авторка: є сайт або SPA, що збирається, наприклад, у dist/. Потрібно опублікувати його не з кореня домену, а з префіксом URL, наприклад:
example.com/blog/— для головної сторінки блогуexample.com/blog/posts/post1— для сторінки поста
Раніше, щоб це працювало зі статичними asset'ами Workers, доводилося фізично вкладати файли в підкаталог blog (тобто мати dist/blog/index.html тощо) або підлаштовувати білд під цей підкаталог.
Оновлення додає конфігураційний параметр базового шляху статичних ресурсів. Тепер можна:
- залишити файли в корені директорії asset'ів (наприклад,
dist/index.html) - налаштувати публічний префікс URL через конфіг (
/blog)
Нове налаштування base_path / basePath у конфігах
Cloudflare додає параметр базового шляху статичних asset'ів у два варіанти конфігурації:
assets.base_path— для Wrangler (JSON або TOML конфіг)worker.assets.basePath— дляcloudflare.config.tsу форматі cf-config
Цей параметр визначає, з якого URL-префікса буде віддаватися вміст директорії зі статикою, не змінюючи її внутрішню структуру.
Приклад з cloudflare.config.ts (cf CLI)
Варіант для нового формату конфігурації cloudflare.config.ts з використанням cf:
import { defineConfig } from "cf/config";
export default defineConfig({
worker: {
name: "blog",
// Set this to today's date
compatibilityDate: "2026-11-11",
assets: {
basePath: "/blog",
},
},
});
Ключові моменти цього прикладу:
worker.nameзадає ім'я Worker'а (тутblog).compatibilityDateпотрібно виставити на поточну дату, щоб Worker працював з актуальним набором можливостей.- Блок
assetsтепер приймає параметрbasePath, який і визначає публічний префікс (/blog).
Локальна структура файлів при цьому може залишатися такою:
dist/index.htmldist/posts/post1.html
Приклад з wrangler.json
Якщо конфігурація ведеться у форматі wrangler.json, авторка показує такий варіант:
{
"$schema": "./node_modules/wrangler/config-schema.json",
"assets": {
"directory": "./dist",
"base_path": "/blog"
}
}
Тут:
assets.directoryвказує на локальний каталог зі зібраними файлами, наприклад,./dist.assets.base_pathвстановлює публічний URL-префікс/blog.
Приклад з wrangler.toml
Для проєктів з TOML-конфігурацією (wrangler.toml) структура задається секцією [assets]:
[assets]
directory = "./dist"
base_path = "/blog"
Семантика та ж сама:
directory— шлях до каталогу з білдом.base_path— URL-префікс, з якого віддаються статичні файли.
Маршрутизація запитів з /blog до файлів у dist
Авторка окремо фіксує, як саме Cloudflare зіставляє URL з файлами після введення базового шляху:
- Запит до
/blog/віддає файлdist/index.html. - Запит до
/blog/posts/post1віддаєdist/posts/post1.html. - Будь-які запити поза
/blog/не вважаються запитами до статичних asset'ів і спрямовуються на Worker (якщо він є).
Таким чином, можна поєднати:
- звичайний Worker, що обробляє кореневі або інші шляхи
- і окремий підшлях зі статичним сайтом, опублікованим як assets з
base_path
Вимоги до версій Wrangler та cf
Нова опція з'являється не у всіх версіях інструментів CLI. У матеріалі вказані мінімальні версії:
- для Wrangler — версія 4.148.0 або новіша
- для
cloudflare.config.tsіcf— версія 1.0.0-beta.13 або новіша
Якщо застосувати параметр base_path чи basePath на старіших версіях, є ризик, що налаштування просто буде проігноровано або спричинить помилки валідації конфігу. Перед міграцією варто оновити CLI.
Як поводяться _headers, _redirects і run_worker_first
У Workers static assets можна керувати додатковою поведінкою через службові файли в каталозі білду, такі як _headers, _redirects і опцію run_worker_first. У тексті наголошується, що всі шляхи в цих файлах вказуються у публічному просторі URL, тобто з урахуванням базового префікса.
Це означає, що при base_path = "/blog" у _headers або _redirects потрібно писати повні шляхи на кшталт:
/blog/..., а не просто/...
Якщо цього не зробити, правила не застосуються до реальних запитів користувачів, оскільки Cloudflare зіставляє їх з повним шляхом, що включає /blog.
Те ж стосується run_worker_first: значення вказуються відносно публічних URL з урахуванням базового шляху.
Зв'язка з Cloudflare Vite plugin: параметр Vite base
Окремий момент у статті — збірка через Cloudflare Vite plugin. Якщо фронтенд збирається Vite і публікується під /blog/, потрібно:
- в конфігурації Workers задати
base_pathабоbasePathяк/blog - додатково виставити Vite
baseуvite.configна/blog/
Без цього Vite згенерує посилання на статичні ресурси (CSS, JS, зображення) відносно кореня сайту (/), і в продакшн-середовищі ці шляхи не співпадуть з реальним префіксом /blog/. Налаштування base у Vite синхронізує внутрішні посилання застосунку з тим, як Worker віддає файли.
Де почитати докладніше про сабдиректорії
Для більш розгорнутих сценаріїв маршрутизації авторка посилається на окремий розділ документації Cloudflare Workers: Serving a subdirectory. Там розглядаються додаткові варіанти роботи з підшляхами і розширені налаштування маршрутизації.
У підсумку, новий параметр базового шляху дозволяє тримати структуру білду плоскою (файли в корені каталогу asset'ів), але при цьому публікувати її як розділ сайту на кшталт /blog/, з урахуванням статичних заголовків, редиректів і сумісності з Vite.
Джерело: Cloudflare Changelog