JavaScript годами жил с одной директивой —
use strict. Стандартизирована, понятна, работает везде одинаково. Чёткий контракт между языком, движками и разработчиками.Сейчас мы наблюдаем взрывной рост фреймворковых директив:
use client, use server, use cache, use workflow, use step — и это только начало. Выглядят как фичи языка, находяться на месте реальных фич языка, влияют на бандлинг и выполнение. Но это не JavaScript.🆚 Как мы уже выяснили — TanStack выбрал путь противоположный философии Next.js и вместо директив предлагает использовать явные импорты и понятный типо-безопасный API.
// Вместо директив
'use cache: remote'
const fn = () => 'value'
// Явный API
import { cache } from 'next/cache'
export const fn = cache(() => 'value', {
strategy: 'remote',
ttl: 60,
})
🛣 К чему это может привести?
Путь Vercel/React.js/Next.js: Директивы как DX-магия. Простота для 80% случаев, vendor-оптимизация через FdI (Framework-defined Infrastructure), максимальная интеграция. Риск — lock-in и фрагментация экосистемы.
Путь TanStack: Явные API, чёткая граница платформа/фреймворк/язык, портируемость. Риск — больше бойлерплейта, медленнее внедрение и внесение в стандарт.
🔗 Ресурсы почитать/посмотреть:
* Tanner Linsley: Directives and the Platform Boundary
* Next.js 16 Directives
* Vercel's Workflow Directives
* React's 19 Directives
* This is good, actually. Theo - t3.gg