Astro ìºì íë¡ë°ì´ë API
ì¶ê°ë ë²ì :
astro@7.0.0
Astro ìºì íë¡ë°ì´ë API를 ì¬ì©íë©´ ë¼ì°í¸ ìºì± ë°©ìì ì¤ì íê³ ê´ë¦¬í ì ììµëë¤. ì´ APIë ì¸ë©ëª¨ë¦¬ ìºì íë¡ë°ì´ë를 기본ì¼ë¡ ì ê³µíë©°, ë¤ìí ìºì± ì ëµê³¼ ë°íìì ë§ì¶ 커ì¤í íë¡ë°ì´ë를 ìì±íë 기ë¥ë ì§ìí©ëë¤.
ìºì íë¡ë°ì´ëë?
ì¹ì ì 목: âìºì íë¡ë°ì´ëë?âìºì ëìì íë¡ì í¸ì ì¤ì ë ìºì íë¡ë°ì´ëì ìí´ ê²°ì ë©ëë¤. íë¡ë°ì´ëë í¬ê² ë ê°ì§ ì¢ ë¥ë¡ ëë©ëë¤.
CDN íë¡ë°ì´ë
ì¹ì ì 목: âCDN íë¡ë°ì´ëâCDN íë¡ë°ì´ëë ìºì ì§ìì´ë¥¼ CDN-Cache-Controlì´ë Cache-Tag ê°ì ìëµ í¤ëë¡ ë³ííë©°, ìºì± ì²ë¦¬ë¥¼ CDNì´ë 리ë²ì¤ íë¡ìì ììí©ëë¤. ì´ë¬í ë´ë¶ í¤ëë¤ì ìëµì´ í´ë¼ì´ì¸í¸ì ëë¬í기 ì ì ì ê±°ë©ëë¤.
CDN íë¡ë°ì´ëë ìë§ì í¤ë를 ìì±íëë¡ setHeaders()를 구íí©ëë¤.
ë°íì íë¡ë°ì´ë
ì¹ì ì 목: âë°íì íë¡ë°ì´ëâë°íì íë¡ë°ì´ëë ìì²ì ê°ë¡ì±ì íë¡ì¸ì¤ ë´ë¶ìì ìëµì ìºì±íëë¡ onRequest()를 구íí©ëë¤. ìºì ìí를 íì¸í ì ìëë¡ X-Astro-Cache ìëµ í¤ë를 ì¶ê°íë©°, í¤ë ê°ì ë¤ìê³¼ ê°ìµëë¤:
HIT: ìºìë ìëµì ë°íí©ëë¤.MISS: ìëµì ìë¡ ë ëë§í í ìºìì ì ì¥í©ëë¤.STALE: 백그ë¼ì´ëìì ìºì를 ì¬ê²ì¦íë ëì ë§ë£ë 기존 ìëµì ë°íí©ëë¤.
ë´ì¥ ë©ëª¨ë¦¬ ìºì íë¡ë°ì´ë
ì¹ì ì 목: âë´ì¥ ë©ëª¨ë¦¬ ìºì íë¡ë°ì´ëâAstroë ë¨ì¼ ì¸ì¤í´ì¤ ë°°í¬ì ì í©í LRU 기ë°ì ë´ì¥ ì¸ë©ëª¨ë¦¬ ë°íì ìºì íë¡ë°ì´ë를 ì ê³µí©ëë¤. ì´ íë¡ë°ì´ë를 ì¬ì©íë ¤ë©´ astro/configìì memoryCache()를 ê°ì ¸ì¤ì¸ì:
import { defineConfig, memoryCache } from 'astro/config';
export default defineConfig({ cache: { provider: memoryCache({ max: 500 }), },});memoryCache() ìµì
ì¹ì
ì 목: âmemoryCache() ìµì
âíì
: { max?: number; query?: object }
기본ê°: { max: 1000 }
ì¸ë©ëª¨ë¦¬ ìºì íë¡ë°ì´ë를 ì¤ì í©ëë¤.
íì
: number
기본ê°: 1000
ìºìì ì ì§í ìµë í목 ì를 ì§ì í©ëë¤. ìºì í목 ìê° ì´ ì íì ì´ê³¼íë©´ ê°ì¥ ì¤ë«ëì ì¬ì©ëì§ ìì íëª©ì´ ë¨¼ì ì ê±°ë©ëë¤.
íì
: { sort?: boolean; include?: string[]; exclude?: string[]; }
ìºì í¤ë¥¼ ìì±í ë 쿼리 íë¼ë¯¸í°ë¥¼ ì²ë¦¬íë ë°©ìì ì ì´í©ëë¤.
query.sort
ì¹ì
ì 목: âquery.sortâíì
: boolean
기본ê°: true
쿼리 íë¼ë¯¸í°ë¥¼ ìíë²³ìì¼ë¡ ì ë ¬í ì§ ì¬ë¶ë¥¼ ì¤ì í©ëë¤. íë¼ë¯¸í°ì ììê° ë¬ë¼ì§ëë¼ë ëì¼í ìºì í¤ë¡ ì²ë¦¬ëëë¡ ë³´ì¥íê³ ì¶ì ë ì ì©í©ëë¤.
ì ë ¬ 기ë¥ì ëê³ ì¿¼ë¦¬ íë¼ë¯¸í° ììê° ë¤ë¥¸ URLì ê°ê° ë³ê°ì ìºì í목ì¼ë¡ ì²ë¦¬íë ¤ë©´ falseë¡ ì¤ì íì¸ì.
query.exclude
ì¹ì
ì 목: âquery.excludeâíì
: string[]
기본ê°: ['utm_*', 'fbclid', 'gclid', 'gbraid', 'wbraid', 'dclid', 'msclkid', 'twclid', 'li_fat_id', 'mc_cid', 'mc_eid', '_ga', '_gl', '_hsenc', '_hsmi', '_ke', 'oly_anon_id', 'oly_enc_id', 'rb_clickid', 's_cid', 'vero_id', 'wickedid', 'yclid', '__s', 'ref']
ìºì í¤ ìì± ì ì ì¸í 쿼리 íë¼ë¯¸í° 목ë¡ì
ëë¤. utm_*ê³¼ ê°ì Glob ìì¼ëì¹´ë í¨í´ì ì§ìíë©°, 기본ì ì¼ë¡ íí ì¬ì©ëë ê´ê³ ì¶ì ë° ë¶ìì© íë¼ë¯¸í°ë¤ì ì ì¸í©ëë¤.
모ë 쿼리 íë¼ë¯¸í°ë¥¼ ìºì í¤ì í¬í¨íë ¤ë©´ []ë¡ ì¤ì íì¸ì:
memoryCache({ query: { exclude: [] },});includeì í¨ê» ì¬ì©íë©´ ì¤ë¥ê° ë°ìí©ëë¤.
query.include
ì¹ì
ì 목: âquery.includeâíì
: string[]
ìºì í¤ì í¬í¨í 쿼리 íë¼ë¯¸í° ì´ë¦ 목ë¡ì ëë¤. ì´ ìµì ì ì¤ì íë©´, 기본ì¼ë¡ ì ì©ëë ì¶ì íë¼ë¯¸í° ì ì¸ ê·ì¹ì í¬í¨íì¬ ë¤ë¥¸ 모ë íë¼ë¯¸í°ë 무ìë©ëë¤.
ë¤ì ììë ìºì í¤ ìì± ì pageì sort íë¼ë¯¸í°ë§ ì¬ì©íê³ ë머ì§ë 모ë 무ìíë ì¤ì ì ë³´ì¬ì¤ëë¤:
memoryCache({ query: { include: ['page', 'sort'] },});exclude ìµì
ê³¼ ëìì ì¬ì©íë©´ ìë¬ê° ë°ìí©ëë¤.
ìºì í¤ì ëì ë°©ì
ì¹ì ì 목: âìºì í¤ì ëì ë°©ìâì¸ë©ëª¨ë¦¬ íë¡ë°ì´ëë ìºì ì ì¤ë¥ ì ëì´ê¸° ìí´ ìºì í¤ë¥¼ ìëì¼ë¡ ì ê·íí©ëë¤:
- 쿼리 íë¼ë¯¸í° ì ë ¬: íë¼ë¯¸í°ê° ìíë²³ìì¼ë¡ ì ë ¬ëë¯ë¡,
/page?b=2&a=1ê³¼/page?a=1&b=2ë ëì¼í ìºì í목ì¼ë¡ ì²ë¦¬ë©ëë¤. - ì¶ì íë¼ë¯¸í° ì ì¸:
utm_source,fbclid,gclidì ê°ì ì¼ë°ì ì¸ ë¶ì ë° ì¶ì íë¼ë¯¸í°ë 기본ì ì¼ë¡ ìºì í¤ìì ì ì¸ë©ëë¤. ì´ë íì´ì§ ì½í ì¸ ìë ìë¬´ë° ìí¥ì ì£¼ì§ ìì¼ë©´ì, ë§ì¼í ë§í¬ ì ì ì¼ë¡ ì¸í´ ìºìê° ë¶íìíê² íí¸íëë íìì ë°©ì§í´ ì¤ëë¤. - Vary í¤ë ì§ì: ìëµì
Varyí¤ëê° í¬í¨ëì´ ìì¼ë©´, ì¸ë©ëª¨ë¦¬ íë¡ë°ì´ëë ì§ì ë ìì² í¤ë ê°ì ë°ë¼ ìë¡ ë¤ë¥¸ ìºì í목ì ìì±í©ëë¤. ì를 ë¤ì´Vary: Accept-Languageí¤ëê° ìë ìëµì ì¬ì©ìì ì¸ì´ ì¤ì ë³ë¡ ê°ê° ë¤ë¥¸ ë²ì ì ìºì±í©ëë¤.
Cookie í¤ëë ì¬ì©ìë§ë¤ ê°ì´ ë¤ ë¤ë¥¸ ê³ ì í í¹ì±ì ê°ì§ê¸° ë문ì, Vary 기ë°ì ìºì í¤ ìì± íë¡ì¸ì¤ìì íì 무ìëë©° ì¬ì¤ì ìºì± ëììì ì ì¸ë©ëë¤.
커ì¤í ìºì íë¡ë°ì´ë ìì±í기
ì¹ì ì 목: â커ì¤í ìºì íë¡ë°ì´ë ìì±í기âìºì íë¡ë°ì´ëë ë¤ì ë ê°ì§ ììë¡ êµ¬ì±ë©ëë¤:
-
ë°íì 모ë â
CacheProviderFactoryí¨ì를 기본 ë´ë³´ë´ê¸°íë íì¼ì ëë¤. ì´ ëª¨ëì SSR 결과물ì í¨ê» ë²ë¤ëë¯ë¡ í¹ì ë°íìì ì¢ ìëì§ ììì¼ í©ëë¤. ëì ë°íìì´ ì§ìíë ê²½ì°ê° ìëë¼ë©´node:fsënode:pathê°ì Node.js ë´ì¥ 모ëì ì¬ì©ì í¼íì¸ì. -
ì¤ì í¬í¼ â ì¬ì©ìê°
astro.config.mjsìì í¸ì¶í ì ìëë¡ ë´ë³´ë¸ í¨ìì ëë¤. ì´ í¨ìë Astroìê² ë°íì 모ëì ìì¹ì ì ë¬í ìµì ì ìë ¤ì£¼ëCacheProviderConfigê°ì²´ë¥¼ ë°íí©ëë¤. ì´ë ë´ì¥ëmemoryCache()íë¡ë°ì´ëê° ì¬ì©íë ë°©ìê³¼ ëì¼í©ëë¤.
ë¤ì ììë íì ì´ ì§ì ë ìµì ì ë°ì ë°íì 모ëì ê°ë¦¬í¤ë ì¤ì í¬í¼ë¥¼ ë§ëë ë°©ë²ì ë³´ì¬ì¤ëë¤:
import type { CacheProviderConfig } from 'astro';
interface MyProviderOptions { apiKey: string; region?: string;}
export function myCache(options: MyProviderOptions): CacheProviderConfig { return { entrypoint: 'my-provider/runtime', // íë¡ì í¸ ë£¨í¸ìì í´ê²°ë¨ config: options, // ë°íìì í©í ë¦¬ë¡ ì ë¬ë¨ };}ì¤ì í¬í¼ë Astro ì¤ì ìì ë¤ìê³¼ ê°ì´ í¸ì¶í©ëë¤:
import { defineConfig } from 'astro/config';import { myCache } from 'my-provider/config';
export default defineConfig({ cache: { provider: myCache({ apiKey: '...' }), },});ë°íì 모ëì ì§ë ¬íë config를 ì ë¬ë°ì CacheProvider를 ë°ííë í©í 리 í¨ì를 기본 ë´ë³´ë´ê¸°í©ëë¤:
import type { CacheProviderFactory } from 'astro';
const factory: CacheProviderFactory = (config) => { return { name: 'my-cache-provider',
// CDN ì¤íì¼: ìºì ìµì
ì ìëµ í¤ëë¡ ë³í setHeaders(options) { const headers = new Headers(); if (options.maxAge !== undefined) { let value = `max-age=${options.maxAge}`; if (options.swr !== undefined) { value += `, stale-while-revalidate=${options.swr}`; } headers.set('CDN-Cache-Control', value); } if (options.tags?.length) { headers.set('Cache-Tag', options.tags.join(',')); } return headers; },
// ë°íì ì¤íì¼: íìí ê²½ì° ìì² ê°ë¡ì±ê¸° async onRequest(context, next) { // ìºì íì¸, next() í¸ì¶, ìëµ ì ì¥ ë±ì ë¡ì§ì ì²ë¦¬í©ëë¤. return next(); },
// ìºì 무í¨í ìì² ì²ë¦¬ async invalidate(options) { // íê·¸ ëë ê²½ë¡ë³ë¡ ìºì를 ìì íë ë¡ì§ì ì²ë¦¬í©ëë¤. }, };};
export default factory;CDN íë¡ë°ì´ë를 ìì±í ë, Astroë ìºì ì ì´ í¤ëë ê²½ë¡ ê¸°ë°ì 무í¨í í그를 ììíê² ìì±í ì ìëë¡ ê³µì ì í¸ë¦¬í°ë¥¼ ì ê³µí©ëë¤.
ìºì íë¡ë°ì´ë ì í¸ë¦¬í°
ì¹ì ì 목: âìºì íë¡ë°ì´ë ì í¸ë¦¬í°âAstroë CDN íë¡ë°ì´ë ê°ë°ì를 ìí´ astro/cache/provider-utilsìì ê³µì í¬í¼ë¥¼ ì ê³µí©ëë¤. ì´ë Netlify, Vercel, Cloudflare ë±ì ê³µì íë¡ë°ì´ëê° ì¬ì©íë ê²ê³¼ ëì¼í í¬í¼ì
ëë¤.
import { buildCacheControlDirectives, pathTag, setConditionalHeaders, collectInvalidationTags, normalizeTags,} from 'astro/cache/provider-utils';buildCacheControlDirectives()
ì¹ì
ì 목: âbuildCacheControlDirectives()âíì
: (options: CacheOptions, extraDirectives?: string[]) => string | undefined
CacheOptions를 ë°íì¼ë¡ ìºì ì ì´ ì§ìì´ ë¬¸ìì´ì ìì±í©ëë¤. ì를 ë¤ì´ "public, max-age=300, stale-while-revalidate=60"ê³¼ ê°ì 문ìì´ì´ ë¹ëë©ëë¤. ì´ë í¤ë ì´ë¦ì í¬í¨ëì§ ìì¼ë¯ë¡, Netlify-CDN-Cache-Controlì´ë Cloudflare-CDN-Cache-Controlì²ë¼ ê° íë¡ë°ì´ëê° ìíë ìì²´ í¤ë를 ì§ì ì ì©í ì ììµëë¤. publicì´ë durable ê°ì íë«í¼ ì ì© ì§ìì´ë¥¼ ìì ì¶ê°íê³ ì¶ë¤ë©´ extraDirectivesì ì ë¬íë©´ ë©ëë¤. ì¤ì ë ìºì ì§ìì´ê° ìë¤ë©´ undefined를 ë°íí©ëë¤.
pathTag()
ì¹ì
ì 목: âpathTag()âíì
: (path: string) => string
주ì´ì§ ê²½ë¡ì ëí ìºì í그를 ìì±íë©°, íê·¸ íìì astro-path:{path}ì
ëë¤. íë«í¼ ìì²´ìì íê·¸ 기ë°ì ìºì ìì 기ë¥ë§ ì ê³µí ë, invalidate({ path }) 기ë¥ì ì§ìí기 ìí ì©ëë¡ ì¬ì©ë©ëë¤.
setConditionalHeaders()
ì¹ì
ì 목: âsetConditionalHeaders()âíì
: (headers: Headers, options: CacheOptions) => void
CacheOptionsì ì§ì ë ê°ì ë°íì¼ë¡ Headers ê°ì²´ì Last-Modified ë° ETag í¤ë를 ì¤ì í©ëë¤.
collectInvalidationTags()
ì¹ì
ì 목: âcollectInvalidationTags()âíì
: (options: InvalidateOptions) => string[]
ì§ì ë ìµì
ì 무í¨ííë ë° íìí 모ë í그를 ìì§í©ëë¤. ì´ë options.pathê° ì¤ì ëì´ ìë¤ë©´ ê²½ë¡ íê·¸ë í¨ê» ìì§ë©ëë¤. íë«í¼ì´ ìì²´ì ì¼ë¡ ì ê³µíë ê²½ë¡ ìì ê¸°ë¥ ëì , í그를 íì©í´ ê²½ë¡ ë¬´í¨í를 구ííë íë¡ë°ì´ëìì ì£¼ë¡ ì¬ì©ë©ëë¤.
normalizeTags()
ì¹ì
ì 목: ânormalizeTags()âíì
: (tags: string | string[] | undefined) => string[]
ì ë¬ë°ì íê·¸ ê°ì íëì 1ì°¨ì 문ìì´ ë°°ì´ë¡ ì ê·íí©ëë¤.
ìºì íë¡ë°ì´ë íì 참조
ì¹ì ì 목: âìºì íë¡ë°ì´ë íì 참조âë¤ì íì
ì astro 모ëìì ê°ì ¸ì¬ ì ììµëë¤:
import type { CacheOptions, CacheProvider, CacheProviderConfig, CacheProviderFactory, InvalidateOptions,} from "astro";CacheOptions
ì¹ì
ì 목: âCacheOptionsâìºì íë¡ë°ì´ëì ì ë¬ëë ì¤ì ìµì ì ëë¤.
CacheOptions.maxAge
ì¹ì
ì 목: âCacheOptions.maxAgeâíì
: number
ìëµì ìµì ìíë¡ ê°ì£¼í ìê°ì ì´ ë¨ìë¡ ì ìí©ëë¤.
CacheOptions.swr
ì¹ì
ì 목: âCacheOptions.swrâíì
: number
stale-while-revalidate ì í¨ ê¸°ê°ì ì´ ë¨ìë¡ ì§ì í©ëë¤. 백그ë¼ì´ëìì ìë¡ì´ ìëµì ìì±íë ëì ë§ë£ë 기존 ì½í ì¸ ë¥¼ 먼ì ë°íí©ëë¤.
CacheOptions.tags
ì¹ì
ì 목: âCacheOptions.tagsâíì
: string[]
í¹ì ëìì ì§ì í´ ë¬´í¨íí기 ìí ìºì íê·¸ 목ë¡ì
ëë¤. íê·¸ë ì¬ë¬ ë²ì cache.set() í¸ì¶ì ê±¸ì³ ê³ì ëì ë©ëë¤.
CacheOptions.lastModified
ì¹ì
ì 목: âCacheOptions.lastModifiedâíì
: Date
ê°ì¥ ìµê·¼ì ìì ë ì§ë¥¼ ëíë
ëë¤. cache.set()ì ì¬ë¬ ë² í¸ì¶íë©´ì ê°ê¸° ë¤ë¥¸ lastModified ê°ì ì ê³µíë ê²½ì°, ê°ì¥ ìµê·¼ ë ì§ë¥¼ ì ê³µí í¸ì¶ì´ ì°ì ì ì©ë©ëë¤.
CacheOptions.etag
ì¹ì
ì 목: âCacheOptions.etagâíì
: string
ì¡°ê±´ë¶ ìì²ì ì²ë¦¬í기 ìí ìí°í° í그를 ì§ì í©ëë¤.
CacheProvider
ì¹ì
ì 목: âCacheProviderâìºì íë¡ë°ì´ëê° êµ¬íí´ì¼ íë ì¸í°íì´ì¤ì
ëë¤. nameê³¼ invalidate() ìì±ì íìì´ë©°, ê·¸ ì¸ì ìì±ë¤ì ì íì ì¼ë¡ ì ìí ì ììµëë¤.
CacheProvider.name
ì¹ì
ì 목: âCacheProvider.nameâíì
: string
ë¡ê·¸ ì¶ë ¥ ë° íë¡ë°ì´ë ìë³ì ì¬ì©íë ê³ ì í ì´ë¦ì ëë¤.
CacheProvider.setHeaders()
ì¹ì
ì 목: âCacheProvider.setHeaders()âíì
: (options: CacheOptions, request: Request) => Headers
ìºì ìµì ì ìëµ í¤ëë¡ ë³íí©ëë¤. ì´ ë©ìëë ìëµì´ ë ëë§ë í í´ë¼ì´ì¸í¸ë¡ ì ì¡ë기 ì ì í¸ì¶ëë©°, ì¬ê¸°ì ì¤ì ë í¤ëë¤ì ìµì¢ ìëµì´ ì¬ì©ììê² ëë¬í기 ì ì ì ê±°ë©ëë¤.
ì ë¬ë°ì request ê°ì²´ë íë¡ë°ì´ëê° URLì´ë ìì² í¤ë를 ì½ì ì ìëë¡ ë ë²ì§¸ ì¸ìë¡ ì ê³µë©ëë¤. ì´ë ê²½ë¡ ê¸°ë° ë¬´í¨í를 ì²ë¦¬í ì ìëë¡ ìëµì í´ë¹ ê²½ë¡ ì´ë¦ì íê·¸ë¡ ìë ì¶ê°íê³ ì¶ì ë ì ì©í©ëë¤.
CacheProvider.onRequest()
ì¹ì
ì 목: âCacheProvider.onRequest()âíì
: (context: { request: Request; url: URL; waitUntil?: (promise: Promise<unknown>) => void; logger: AstroRuntimeLogger }, next: MiddlewareNext) => Promise<Response>
Astroê° ì¼ì¹íë ë¼ì°í¸ë¥¼ ìì±í기 ì ì ìì²ì ê°ë¡ì±ë ì íì í
ì
ëë¤. 첫 ë²ì§¸ ì¸ìë¡ context ê°ì²´ë¥¼ ë°ê³ , ì²´ì¸ì next() 미ë¤ì¨ì´ë¥¼ í¸ì¶í기 ìí ì½ë°±ì ë°ìµëë¤.
contextìë ë¤ì ìì±ì´ í¬í¨ë©ëë¤:
request: ë¤ì´ì¤ëRequestê°ì²´ì ëë¤.url: ìì²ìì íìë ì ê·íëURLì ëë¤.waitUntil(): ë°íììì ì§ìëë ê²½ì°, ì¤ëë ìºì í목 ì¬ê²ì¦ê³¼ ê°ì 백그ë¼ì´ë ìì ì ì ìíë í¨ìì ëë¤.logger: Astro v7.3.0ë¶í° ì¬ì©í ì ìëloggerì¸ì¤í´ì¤ë¡, 구ì±ë ë¡ê¹ ëìì ë°ë¦ ëë¤.
ë¤ì ììë ìºìì ì¶ê°ë ê° URLì ëí ë¡ê·¸ë¥¼ ë¨ê¸°ë ìµìíì onRequest() í
ì 구íí©ëë¤.
import type { CacheProviderFactory } from 'astro';
const factory: CacheProviderFactory = (config) => { const cache = new Map(); return { name: 'my-cache-provider', async onRequest({ request, url, waitUntil, logger }, next) { if (request.method !== 'GET') return next();
const cached = cache.get(url); if (cached) return cached;
const response = await next(); cache.set(url, response.clone()); logger.info(`Cached response for ${url}.`); return response; }, async invalidate() { // ... }, };};
export default factory;CacheProvider.invalidate()
ì¹ì
ì 목: âCacheProvider.invalidate()âíì
: (options: InvalidateOptions) => Promise<void>
íê·¸ë ê²½ë¡ë³ë¡ ìºì ìì ìì²ì ì²ë¦¬í©ëë¤.
CacheProviderConfig
ì¹ì
ì 목: âCacheProviderConfigâíì
: { entrypoint: string | URL; config?: Record<string, any> }
cache.providerì ì ë¬ëë ì¤ì ê°ì²´ì
ëë¤. íì
ìì ì±ì´ ë³´ì¥ë ì¤ì ì ìí´ memoryCache()ì ê°ì í¬í¼ í¨ì를 ì¬ì©íë ê²ì´ ì¢ìµëë¤.
CacheProviderFactory
ì¹ì
ì 목: âCacheProviderFactoryâíì
: (config: Record<string, any> | undefined) => CacheProvider
í©í 리 í¨ìì íì ì ëë¤. Astro ì¤ì íì¼ë¡ë¶í° ì§ë ¬í ê°ë¥í íë¡ë°ì´ë ì¤ì ê°ì²´ë¥¼ ì ë¬ë°ìµëë¤.
InvalidateOptions
ì¹ì
ì 목: âInvalidateOptionsâíë¡ë°ì´ëì invalidate() ë©ìëì ì ë¬ëë ì¤ì ìµì
ì
ëë¤.
InvalidateOptions.path
ì¹ì
ì 목: âInvalidateOptions.pathâíì
: string
무í¨íí ì íí ê²½ë¡ì ëë¤. Glob í¨í´ì´ë ìì¼ëì¹´ëë ì§ìíì§ ììµëë¤.
InvalidateOptions.tags
ì¹ì
ì 목: âInvalidateOptions.tagsâíì
: string | string[]
무í¨íí íê·¸ ëë íê·¸ 목ë¡ì ëë¤. ì§ì ë íê·¸ì ì¼ì¹íë 모ë ìºì íëª©ì´ ìì ë©ëë¤.
Reference