Astro7.0 Siber Güvenlik

Astro7.0

Astro7 burada! Bu sürüm tamamen hız ile ilgilidir. .astro derleyicisi Rust'ta yeniden yazıldı. Markdown ve MDX işleme artık Rust destekli yeni bir işl...

Astro7 burada! Bu sürüm tamamen hız ile ilgilidir. .astro derleyicisi Rust'ta yeniden yazıldı. Markdown ve MDX işleme artık Rust destekli yeni bir işlem hattı üzerinden yürütülüyor. İşleme motorunun yerini daha hızlı, kuyruk tabanlı bir yaklaşım aldı. Vite 8 ve yeni Rolldown paketleyicisiyle birlikte Astro 7 yapıları, kıyaslamalarımızda %15-61 daha hızlıdır. En hızlı derleme hiç gerçekleşmeyen yapıdır; dolayısıyla Astro 7 aynı zamanda rota önbelleğe almayı da stabilize eder ve Netlify, Vercel ve Cloudflare için deneysel CDN önbellek sağlayıcıları ekler.

Astro 7 aynı zamanda size Astro'nun istek hattı üzerinde tam kontrol sağlayan bir src/fetch.ts giriş noktası sağlayan Gelişmiş Yönlendirmeyi de sunar. Yapay zeka destekli geliştirme için Astro artık kodlama aracılarını tespit edebiliyor, geliştirme sunucusunu arka planda çalıştırabiliyor ve aracılar makine tarafından okunabilir geri bildirime ihtiyaç duyduğunda yapılandırılmış JSON günlüklerinin çıktısını alabiliyor.

Tam sürümün öne çıkan özellikleri şunları içerir:

Mevcut bir projeyi Astro 7'ye yükseltmek için otomatik @astrojs/upgrade CLI aracını kullanın:

# Önerilen: npx @astrojs/upgrade # Kılavuz: npm install astro@latest

Yeni projeler için şunu kullanmanız yeterlidir:

npm astro@latest'i oluştur

Sonuç ve Değerlendirme

Ayrıntılı geçiş adımları için yükseltme kılavuzuna bakın.

Astro 7, yılların en önemli Vite sürümü olan Vite 8'e yükseltiliyor. Başlık değişikliği: Vite artık hem esbuild'i hem de Rollup'ı tek bir birleşik paketleyiciyle değiştiren Rust tabanlı bir paketleyici olan Rolldown'u sunuyor. Rolldown, karşılaştırmalarda Rollup'tan 10-30 kat daha hızlıdır ve aynı Rollup ve Vite eklenti API'lerini destekler.

Astro kullanıcıları için bu, çoğu projede konfigürasyon değişikliği olmadan daha hızlı kurulum anlamına gelir. Vite 8, mevcut esbuild ve rollupOptions yapılandırmasını Rolldown eşdeğerlerine otomatik olarak dönüştüren bir uyumluluk katmanı içerir. Projeniz özel Vite eklentileri kullanıyorsa Rolldown, Rollup ile aynı eklenti API'sini desteklediğinden bunların çoğunun çalışmaya devam etmesi gerekir.

Astro 7, Astro'nun bugüne kadarki en hızlı versiyonudur. Kullanım arttıkça, daha fazla ekip Astro ile ne tür bir site oluşturulabileceği konusunda sınırları zorluyor. Astro 6'yı ve onun büyük dahili yeniden faktörünü piyasaya sürdükten sonra, Astro'nun daha büyük ve daha karmaşık sitelere ölçeklendirilmesine yardımcı olmaya odaklandık.

Sistem Güvenliği

Astro derlemeleri şu şekilde çalışır:

Sitenin sayfalarını, içeriğini ve istemci bileşenlerini JavaScript'te paketleyin. Birlikte verilen kodu küçük bir sunucu gibi çalıştırın, önceden oluşturulmuş her sayfa için istekler oluşturun ve elde edilen HTML'yi kaydedin.

Gelecekte Ne Bekleniyor?

Astro 7 her iki adımı da geliştiriyor ancak ilkine odaklanıyor: sitenin paketlenmesi. En büyük kazanımlar, yapının en yavaş kısımlarından bazılarını Rust'ta yazılmış yerel koda taşımaktan geliyor. Oluşturulacak bölümleri daha etkili bir şekilde sıraya koyan yeni işleme stratejisi sayesinde oluşturma adımı da daha hızlıdır.

Testlerimizde genel yapım süreleri %15-61 oranında iyileşti ve bazı siteler iki kattan daha hızlı inşa edildi. .astro derlemesinin ve Markdown işlemenin yapıda daha büyük bir pay oluşturduğu siteler en büyük kazanımları görüyor çünkü bunlar tam olarak Rust'a taşınan parçalar.

Uzmanların Görüşleri

Bu kıyaslamalar 48 GB belleğe sahip bir MacBook Pro Apple M4 Pro üzerinde gerçekleştirildi:

Nasıl Önlem Alınmalı?

.astro bileşen formatı için artık Rust'ta yazılan yeni bir derleyici oluşturduk. Derleyici, önceki Go tabanlı derleyicimizin tamamen yeniden yazılmış halidir ve aşağıdakiler hariç çoğunlukla geriye dönük olarak uyumludur:

Artık HTML düzeltmesi yok. Go derleyicisi, öğeleri yeniden sıralayarak, etiketleri otomatik olarak kapatarak ve düğümleri genellikle kullanıcıları şaşırtacak ve hata ayıklaması zor sorunlara neden olacak şekilde hareket ettirerek işaretlemenizi "geçerli HTML" olacak şekilde sessizce yeniden yazdı. Yeni derleyici işaretlemenizi olduğu gibi ele alır.

Go derleyicisi, öğeleri yeniden sıralayarak, etiketleri otomatik olarak kapatarak ve düğümleri genellikle kullanıcıları şaşırtacak ve hata ayıklaması zor sorunlara neden olacak şekilde hareket ettirerek işaretlemenizi "geçerli HTML" olacak şekilde sessizce yeniden yazdı. Yeni derleyici işaretlemenizi olduğu gibi ele alır. JSX tarzı katılık.

Hello gibi kapatılmamış etiketler ve
< span >Merhaba < span >Dünya < span >Merhaba { ' ' } < span >Dünya

Rust'a geçmek, desteklenen platformlar için yerel ikili dosyaları, ihtiyaç duyan ortamlar için WASM geri dönüşüyle birlikte göndermemize olanak sağladı. Bu model artık JavaScript araçları dünyasında standarttır ve Rolldown ve Lightning CSS gibi projeler tarafından kullanılır. Temel olarak yeni derleyici, ayrıştırma için oxc ve CSS kapsamı için Lightning CSS üzerine inşa edilmiştir.

Tek başına, Rust derleyicisi https://docs.astro.build'de derleme sürelerinde yaklaşık %6'lık bir iyileşme gösterdi. Bunun nedeni, .astro derlemesinin nadiren darboğaz oluşturmasıdır; İndirimli işleme ve paketleme genellikle derleme süresine hakimdir. Ancak özellikle binlerce sayfalık büyük sitelerde her parça bir araya geliyor ve derleyicinin kazanımları bu sürümdeki diğer performans iyileştirmeleriyle birleşiyor.

Teknik Analiz

Rust'ta Markdown ve MDX

Önemli Gelişmeler

Astro 7, varsayılan Markdown ve MDX hattını, Astro çekirdek ekip üyesi Erika tarafından oluşturulan, Rust destekli bir işlemci olan Sätteri ile değiştiriyor. Astro docs ve Cloudflare docs yapılarını Sätteri'ye geçirmek, yapım sürelerini bir dakikadan fazla kısalttı ve Markdown ağırlıklı siteleri Astro 7'nin en büyük kazananları haline getirdi.

Şimdiye kadar Astro'nun Markdown ardışık düzeni birleşik bir şekilde çalışıyordu (açıklama, yeniden heyecan ve uzun bir JavaScript bağımlılığı kuyruğu). Binlerce sayfadan oluşan büyük sitelerde, bu işlem hattı genellikle derlemenin en yavaş aşamasıydı: her dosya JavaScript aracılığıyla ayrıştırılır, tam AST üzerinden eklenti üzerine eklenti üzerinden çalıştırılır ve ardından tekrar HTML'ye serileştirilir. Astro 6.4'te boru hattını takılabilir hale getirdik ve isteğe bağlı bir alternatif olarak Sätteri'yi sunduk. Astro 7 bunu varsayılan yapar.

Temel olarak Sätteri, CommonMark ayrıştırma için pulldown-cmark'ı ve MDX ifade ayrıştırma için Oxc'yi (her ikisi de yerel Rust) kullanıyor. Platforma özgü ikili dosyaları, yeni .astro derleyicisi tarafından kullanılan yaklaşımın aynısı olan WASM geri dönüşüyle ​​birlikte gönderir. Ancak hız tek kazanç değil. Sätteri ayrıca daha önce ayrı eklentiler gerektiren birçok Markdown özelliğini de yerel olarak uyguluyor:

Birleşik Sätteri GFM özelliği (tablolar, dipnotlar, üstü çizili, görev listeleri) açıklama-gfm eklentisi Yerleşik, varsayılan olarak açık Akıllı noktalama işaretleri (kıvırcık tırnaklar, uzun tireler) açıklama-smartypants eklentisi Yerleşik Başlık Kimlikleri açıklama-başlık-kimliği veya benzer eklenti Yerleşik Konteyner direktifleri açıklama-direktif eklentisi Yerleşik Matematik açıklama-matematik eklentisi Yerleşik Frontmatter (YAML, TOML) açıklama-frontmatter eklentisi Yerleşik Üst simge / alt simge açıklama-supersub veya benzer eklenti Yerleşik Wikilinks açıklama-wiki-bağlantı eklentisi Yerleşik

Varsayılan olmayan özellikler, özellikler seçeneği aracılığıyla etkinleştirilir:

astro.config.mjs 'astro/config'den { defineConfig }'i içe aktarın; '@astrojs/markdown-satteri' adresinden { satteri }'yi içe aktarın; varsayılan defineConfig'i dışa aktar ({ markdown : { işlemci : satteri ({ özellikler : { direktif : true , math : true , titleAttributes : true , }, }), }, });

Sätteri'nin de kendi eklenti API'si vardır. Eklentiler, her geçişte ağacın tamamını yürümek yerine, hangi düğüm türlerini önemsediklerini bildirir ve geri kalanını atlar. Bu, eklenti eklemeyi, her eklentinin her düğümden geçtiği birleşikten çok daha ucuz hale getirir.

Açıklama veya yeniden yönlendirme eklentilerine bağlıysanız, birleştirilmiş tabanlı boru hattına hala @astrojs/markdown-remark aracılığıyla ulaşabilirsiniz:

astro.config.mjs 'astro/config'den { defineConfig }'i içe aktarın; { unified } dosyasını '@astrojs/markdown-remark' adresinden içe aktarın; 'remark-toc'tan commentToc'u içe aktarın; varsayılan defineConfig'i dışa aktar ({ markdown : { işlemci : birleşik ({ commentPlugins : [ commentToc ], }), }, });

Satteri.bruits.org adresinden Sätteri'nin özellikleri ve eklenti API'si hakkında daha fazla bilgi edinin.

Sıraya Alınmış İşleme

Sıraya alınmış işleme, Astro 6.0'da deneysel bir seçenek olarak tanıtıldı ve artık kararlı ve varsayılan işleme motorudur. Hız olarak ~2,4 kat daha hızlıdır1!

astro.config.mjs "astro/config" öğesinden { defineConfig } dosyasını içe aktarın; varsayılan defineConfig'i dışa aktar ({ deneysel: { kuyrukluRendering: { etkin: doğru, havuzlama: doğru, contentCache: 1000 } } })

Daha önce Astro, aşağıdaki sözde kodda olduğu gibi, çocukların aynı render* işlevi kullanılarak oluşturulduğu özyinelemeli bir yaklaşım kullanarak sayfaları render ediyordu:

render.ts dışa aktarma işlevi renderComponentToString (düğüm: bilinmiyor): string { let hedef = ""; hedef += `< ${ düğümü . ad } >`; // etiket açılıyor // render nitelikleri (node.children'in const çocuğu) { // Burada renderComponentT'yi çağırarak çocukları yineliyoruz oString hedef += renderComponentToString ( çocuk); } hedef += ``; // etiket dönüş hedefini kapatıyoruz; }

Yeni motor bir kuyruk (veya yığın) ve tek bir döngü kullanıyor. Kuyruk, alt düğümlerle doğru sırayla doldurulur ve döngü, kuyruk boşalana kadar düğümleri oluşturmaya devam eder. Aşağıdaki sahte kod, gerçek anlaşmanın aşırı basitleştirilmiş bir versiyonudur, ancak net bir resim sunmalıdır:

render.ts dışa aktarma işlevi renderComponentToString ( root : bilinmiyor): string { let hedef = ""; hedef += `< ${ root . ad } >`; // etiketi açıyoruz // bu bizim sıramızdır, biz render alırken doldurulur ve temizlenir let stack = [ root ]; while (yığın. uzunluk > 0) { const düğüm = yığın. pop(); if ( Array . isArray ( node )) { // ( let i = node . uzunluk - 1 ; i >= 0 ; i --) yığın için ilk olarak en uçtaki düğümlerin hedefe dönüştürülmesi gerekir. push ( düğüm [ i ]); devam etmek ; } const nodeType = düğüm tipi; if ( nodeType === 'string') { hedef += kaçışHTML ( node as string); } } hedef += ``; // etiketin dönüş hedefini açıyoruz; }

Stratejinin ilk uygulaması iki geçişli bir aşamada çalıştı: bileşenlerin (düğümlerin) sıralı bir listesini oluşturun ve listeyi döngüye alın ve bileşenleri oluşturun.

Yeni uygulama artık tam bir liste oluşturmuyor; bunun yerine liste döngü halindeyken işleniyor (temizleniyor). Bu son yaklaşım, ilk yinelemeden daha hızlıdır ve özyinelemeli yaklaşımla karşılaştırıldığında daha az belleğe ihtiyaç duyar.

Astro, dosya tabanlı yönlendirmeye sahip statik bir site oluşturucu olarak başladı. Zamanla, ara katman yazılımı, yönlendirmeler, yeniden yazmalar, Eylemler, oturumlar ve i18n gibi özellikler Astro uygulamalarına sunucu tarafında daha fazla güç kazandırdı, ancak aynı zamanda istek yaşam döngüsünün kontrolünü de zorlaştırdı. Eylemler'den önce çalıştırmak için kimlik doğrulamaya, yalnızca sayfa oluşturmayı sarmak için günlüğe kaydetmeye veya önce bazı istekleri işlemek için Astro olmayan bir API'ye ihtiyacınız varsa, onu doğrudan oluşturmak yerine işlem hattı üzerinde çalışmanız gerekiyordu.

Astro 7'de artık projenize bir src/fetch.ts dosyası ekleyerek Astro'nun istek hattı üzerinde tam kontrol sahibi olabilirsiniz. Bu dosya, Cloudflare Workers, Deno ve Bun tarafından popüler hale getirilen standart getirme işleyici modelini dışa aktarır.

src/fetch.ts 'astro/fetch' dosyasından { astro , FetchState } dosyasını içe aktarır; varsayılanı dışa aktar { fetch ( request : İstek ) { const state = new FetchState ( request ); // API isteklerini bir arka uç hizmetine iletin if ( state . url . pathname .startsWith ( '/api' )) { const url = yeni URL ( state . url . yol adı + state . url . search , 'https://backend-api.example.com' ); return fetch (yeni İstek (url, istek)); } // Astro sayfalarına/uç noktalara geri dönüş astro'yu (durum) döndürür; } }

API aynı zamanda Hono ile de uyumludur ve Hono ara katman yazılımını Astro uygulamanıza getirmenize olanak tanır:

src/fetch.ts 'astro/hono'dan { astro } dosyasını içe aktarır; 'hono'dan { Hono }'yu içe aktarın; 'hono/basic-auth'tan { basicAuth } dosyasını içe aktarın; const uygulaması = yeni Hono (); uygulama . use ( basicAuth ({ kullanıcı adı : 'admin', şifre : 'gizli' })); uygulama . ( astro ()) kullanın; varsayılan uygulamayı dışa aktar;

Gelişmiş kullanım için, bireysel Astro özelliklerini ayrı bir ara katman yazılımı olarak oluşturarak, istek hattı üzerinde tam kontrol sahibi olabilirsiniz. Astro ara katman yazılımını kullandıysanız ve kimlik doğrulama kontrolünüzün Astro Actions'dan sonra çalıştırılmasından dolayı hayal kırıklığına uğradıysanız veya her şeyi kendiniz tamamlamadan yanıt zamanlamasını kaydedemediyseniz, artık kodunuzu tam olarak olması gereken yere koyabilirsiniz:

src/fetch.ts 'hono'dan { Hono }'yu içe aktarır; 'astro/hono'dan { eylemler , ara katman yazılımı , sayfalar , i18n }'yi içe aktarın; './middleware/auth' dosyasından { auth } dosyasını içe aktarın; './middleware/timing' dosyasından { Timing } dosyasını içe aktarın; const uygulaması = yeni Hono (); uygulama . ( i18n ()) kullanın; uygulama . ( kimlik doğrulaması ()) kullanın; // Kimlik doğrulama eylemlerden önce çalışır, kimliği doğrulanmamış çağrı uygulaması yoktur. ( eylemler ()); kullanın; uygulama . ( ara yazılım ()) kullanın; uygulama . ( zamanlama ()) kullanın; // Zamanlama yalnızca sayfa oluşturma uygulamasını sarar. ( sayfalar ()); varsayılan uygulamayı dışa aktar;

Bir src/fetch.ts dosyası eklemezseniz Astro tam olarak bugünkü gibi davranır.

İsteğe bağlı olarak oluşturulan yanıtların önbelleğe alınması olması gerekenden daha zordur. Her ana bilgisayar bunu farklı şekilde yapar ve bunu uygulama kodunuzdan kontrol etmenin hiçbir zaman standart bir yolu olmamıştır. Astro 7 bunu çözmek için rota önbelleğe almayı sunuyor. İlk olarak Astro 6'da deneysel olarak yayımlanan bu özellik artık kararlıdır ve önbelleğe alma için platformdan bağımsız tek bir API ekler: rotalarınızda yönergeleri ayarlayın ve Astro, konuşlandırdığınız her yerde gerisini halleder.

Bir önbellek sağlayıcısını bir kez yapılandırırsınız, ardından sayfalarınızda Astro.cache'i kullanırsınız ( veya API rotalarında ve ara katman yazılımında context.cache) standart HTTP önbelleğe alma semantiğine dayalı olarak yanıt başına önbelleğe almayı kontrol etmek için kullanılır. Astro, başlamanıza yardımcı olmak için yerleşik bir MemoryCache() sağlayıcısıyla birlikte gelir:

astro.config.mjs 'astro/config' dosyasından { defineConfig , MemoryCache } dosyasını içe aktarın; varsayılan defineConfig'i dışa aktar ({ önbellek: { sağlayıcı: MemoryCache (), }, });

src/pages/products/[id].astro --- Astro . önbellek. set ({ maxAge : 120 , // 2 dakika önbellek swr : 60 , // Etiketleri yeniden doğrularken 1 dakika boyunca eski olanı yayınlayın : [ 'products' ], // Hedeflenen geçersiz kılma etiketi }); ---

Ayrıca, rota grupları için önbelleğe alma kurallarını, rota kodunuzdan tamamen uzak tutarak, rotaRules ile yapılandırmanızda bildirimli olarak tanımlayabilirsiniz:

astro.config.mjs varsayılan defineConfig'i dışa aktarır ({ önbellek: { sağlayıcı: MemoryCache () }, RouteRules: { '/blog/[...yol]': { maxAge: 300, swr: 60 }, }, });

Rota önbelleğe almanın gerçekten parladığı nokta, canlı içerik koleksiyonlarıyla entegrasyonudur. Canlı bir yükleyici, döndürdüğü verilere, geçersiz kılma etiketlerini ve tazelik için son değiştirilme zamanını içeren bir önbellek ipucu ekleyebilir. Bu girişi doğrudan Astro.cache.set()'e iletin ve Astro ipucunu sizin için okusun, manuel başlıklara gerek yok:

src/pages/products/[id].astro --- 'astro:content'tan { getLiveEntry }'yi içe aktarın; const { giriş } = wait getLiveEntry ('ürünler', Astro.params.id); // Astro, yükleyicinin önbellek ipucunu girdiden okur: Astro . önbellek. ayarla (giriş); ---

Önbelleğe alınan yanıtlar isteğe bağlı olarak, önbellek.invalidate() ile, etikete veya yola göre temizlenebilir. Örneğin, içerik değiştiğinde CMS'nizin çağıracağı bir webhook uç noktasını kullanıma sunabilirsiniz. Bu, her sağlayıcının geçersiz kılma API'sine eşlenir ve etkilenen her yanıtı yeniden oluşturmadan temizler:

src/pages/api/revalidate.ts 'astro'dan { APIRoute } türünü içe aktarın; import const POST : APIRoute = async ({ request , önbellek }) => { // Gerçek bir uygulama, isteği doğrular ve geçersiz kılmadan önce gizli bir belirteci kontrol eder. const { slug } = istek bekleniyor. json(); // 'Ürünler' etiketli her yanıtı geçersiz kılın... önbelleği bekliyor. geçersiz kılma ({ etiketler : [ "ürünler" ] }); // ...belirli bir girişi kullanan her sayfayı geçersiz kıl... önbelleği bekliyor. geçersiz kılma ({ etiketler : [ `ürünler: ${ slug } ` ] }); // ...veya tek bir yolu doğrudan temizleyin. önbelleği bekleyin. geçersiz kılma ({ yol : `/products/ ${ slug } ` }); yeni Yanıt döndür ( 'Yeniden Doğrulandı'); };

Deneysel iken rota önbelleğe almayı denediyseniz, tek değişiklik önbelleği ve RouteRules'u deneysel bloğun dışına, yapılandırmanızın en üst düzeyine taşımaktır. Bunun dışında API değişmemiştir. Tam referans için rota önbelleğe alma kılavuzuna bakın.

CDN Önbellek Sağlayıcıları

Rota önbelleğe alma Astro 6'da sunulduğunda, Node bağdaştırıcısıyla birlikte kullanılacak tek bir bellek içi sağlayıcıyla birlikte geldi. Astro 7, Netlify, Vercel ve Cloudflare (özel beta sürümünde) için deneysel CDN sağlayıcıları ekler.

Bu sağlayıcılar, yanıtları bellekte depolamak yerine, daha hızlı yanıtlar için önbelleğe alma yönergelerinizi ana bilgisayarın uç ağına aktarır. Önbellek isabetleri daha sonra sunucu işlevinizi hiç çağırmadan doğrudan CDN'den sunulur.

Gelecekteki bir sürümde bu sağlayıcılar otomatik olarak etkinleştirilecektir ancak deneysel aşamada bunları manuel olarak eklemelisiniz. Bağdaştırıcınızın sağlayıcısını içe aktarın ve önbellek sağlayıcınız olarak ayarlayın:

astro.config.mjs 'astro/config'den { defineConfig }'i içe aktarın; netlify'ı '@astrojs/netlify' adresinden içe aktarın; '@astrojs/netlify/cache' adresinden {acheNetlify } dosyasını içe aktarın; varsayılan defineConfig'i dışa aktar ({ bağdaştırıcı : netlify (), önbellek : { sağlayıcı : önbellekNetlify (), }, });

Her bağdaştırıcı, /cache giriş noktasından bir sağlayıcıyı dışa aktarır:

Bağdaştırıcı İçe Aktarma Sağlayıcısı Netlify @astrojs/netlify/cache önbellekNetlify() Vercel @astrojs/vercel/cache önbellekVercel() Cloudflare ⚠️ @astrojs/cloudflare/cache önbellekCloudflare()

Aynı Astro.cache , RouteRules ve Cache.invalidate() API'leri her sağlayıcıyla çalışır. Her biri, yönergelerinizi platformun yerel önbellek kontrol başlıklarına ve etiket veya yol tabanlı temizleme işlemlerine dönüştürür.

Özel beta Cloudflare sağlayıcısı, şu anda özel beta sürümünde olan Cloudflare Workers Cache özelliğini gerektirir. Beta erişimi olmadan çalışmaz ve kullanılmamalıdır.

Yapay Zeka Geliştirmeleri

Yapay zeka kodlama aracıları artık birçok geliştiricinin iş akışının bir parçası ve geliştiricilerin bir geliştirme sunucusundan insanlardan farklı şeylere ihtiyaçları var. Astro 7, Astro'yu aracı odaklı geliştirme için daha iyi bir platform haline getirmeye yönelik ilk adımımızdır.

Arka Plan Geliştirme Sunucusu

Yapay zeka ajanları uzun süren süreçlerle mücadele ediyor. Onlar kabukludur ut, çıkışı bekleyin ve çıktıyı okuyun, ancak dev sunucusundan asla çıkılmaz. Aracılar kilitlenir, sunucuların kopyalarını başlatır, çalışan bulut sunucularının takibini kaybeder veya zombi işlemlerini geride bırakır. Bunu Astro'nun otomatik sorun önceliklendirmesinin bir parçası olarak görüyoruz; temsilciler bazen kodu test etmek yerine geliştirici sunucularıyla uğraşmaya daha fazla zaman harcıyor.

Astro 7, dev sunucusunu yönetilen bir arka plan işlemi olarak başlatan astro dev --background öğesini ekler. Astro ayrıca bir AI aracısının içinde çalıştığını algılayabilir ve arka plan modunu otomatik olarak etkinleştirebilir, böylece aracı iş akışlarında herhangi bir işarete gerek kalmaz. Hiçbir aracı algılanmazsa astro dev tam olarak eskisi gibi davranır.

$ astro dev --background http://localhost:4321 (pid 12345) adresinde çalışan dev sunucusu Durdurma: astro dev stop Durum: astro dev durumu Günlükler: astro dev günlükleri

Komut, sunucu istekleri kabul etmeye hazır olana kadar bloke eder, URL'yi ve işlem kimliğini bildirir, ardından ayrılır. Yoklama yok, uyku yok, "Yerel:" için terminal çıktısının ayrıştırılması yok.

Bir kilit dosyası yinelenen örnekleri önler. Bir aracı ikinci bir sunucu başlatmaya çalışırsa, çelişkili bir süreç oluşturmak yerine mevcut örneğin ayrıntılarını geri alır:

$ astro dev --background Dev sunucusu zaten http://localhost:4321 adresinde çalışıyor (pid 12345 )

Durumu kontrol edebilir ve sunucuyu ayrı kabuk oturumlarından durdurabilirsiniz:

$ astro dev status Dev sunucusu http://localhost:4321 adresinde çalışıyor (pid 12345, çalışma süresi 123'ler, arka plan ) $ astro dev stop Dev sunucusu durduruldu (pid 12345).

Ayrıca arka plan sunucusunun günlüklerini astro dev günlükleriyle de okuyabilirsiniz.

Her komut önemsiz ve bağışlayıcıdır. Çalışmıyorken durdurmak sessizce başarılı olur ve zaten çalışırken başlatmak mevcut örneği döndürür. Aracılar sıklıkla süreç durumunun takibini kaybederler ve CLI onları bunun için cezalandırmaz.

Çalışan tüm geliştirme sunucuları ayrıca, aracıların sunucunun canlı ve istekleri kabul etmeye hazır olduğunu doğrulamak için sorgulayabileceği bir /_astro/status sistem durumu uç noktasını açığa çıkarır.

Astro'nun kaydedicisi artık tamamen yapılandırılabilir. Aracılar için, aracı algılama arka plan modunu açtığında JSON günlük kaydı otomatik olarak etkinleştirilir. Diğer herkes için CLI veya yapılandırma aracılığıyla kullanılabilir:

astro.config.mjs "astro/config" dosyasından { defineConfig , logHandlers }'ı içe aktarın; varsayılan defineConfig'i dışa aktar ({ logger : logHandlers . json () })

JSON günlük kaydı, yol haritamızda en çok beğenilen özellik isteğiydi ve bunun nedeni yalnızca yapay zeka değildi. Astro SSR'yi üretime dağıtan ekipler, Kibana, CloudWatch ve Grafana/Loki gibi günlük toplama hizmetleriyle entegrasyon için yapılandırılmış günlüklere ihtiyaç duyar. Astro'nun önceki kayıtları insanların okuyabilmesi için sabit kodlanmıştı: renkler, kutu çizim karakterleri, çok satırlı hata formatı. Bunların hiçbiri makineler tarafından ayrıştırılamaz.

Yeni günlükçü API'si aynı zamanda özel günlük işleyicileri ve birden fazla günlükçüyü birleştirmek için compose() API'sini de destekler. Örneğin, konsolda insan tarafından okunabilir çıktıyı tutarken aynı zamanda yapılandırılmış çıktıya ihtiyaç duyan araçlar için JSON günlükleri yazabilirsiniz:

astro.config.mjs "astro/config" dosyasından { defineConfig , logHandlers }'ı içe aktarın; varsayılan defineConfig'i dışa aktar ({ logger : logHandlers . compose ( logHandlers . console (), logHandlers . json () ) })

Yapay zeka kılavuzundan Astro'nun yapay zeka araçlarına yönelik desteği hakkında daha fazla bilgi edinin.

Astro çekirdek ekibi:

Alexander Niebuhr, Armand Philippot, Chris Swithinbank, Emanuele Stoppa, Erika, Florian Lefebvre, Fred Schott, HiDeoo, Luiz Ferraz, Matt Kane, Matthew Phillips, Reuben Tier, Sarah Rainsberger ve Yan Thomas.

Astro 7'ye kodlar, belgeler, incelemeler ve testlerle katkıda bulunan herkese özel teşekkürler; örneğin:

0x K., 0xRozier, AceCodePt, Adam Chalemian, Adam Matthiesen, Adam McKee, Adam Page, Agus Setiawan, Ahmad Yasser, Alejandro Romano, Alex, Alex Dombroski, Alex Launi, Alexander Flodin, Alexis Aguilar, Aly Cerruti, Amar Reddy, Andreas Deininger, Andrei Alba, Antony Faris, Ariel K, Ash Hitchcock, atsbob, B Sai Thrishul, Barry, Ben Limmer, Bernd Strehl, BitToby, btea, Burra Karthikeya, buschtrisha77, Calvin Liang, Cameron Pak, Cameron Smith, Carlos Lázaro Costa, chaegumi, Chan, Chase McCoy, ChrisLaRocque, Ciaran Moran, Corbin Crutchley, CyberFlame, Daniel Bodky, Daniel Lo Nigro, Daniel Zamyatin, Daniil Sivak, Dario Piotrowicz, dataCenter430, Dawid Gaweł, Desel72, dfedoryshchev, Dom Christie, bitti, Dor Alagem, Dream, Ed Melly, Ed Melly, Edgar, Ellie, Em Poulter, Eric Grill, Eric Mika, Eryk Baran, Eveeifyeve, fabon, farshad, Felipe Arce, Felix Schneider, Felmon, fkatsuhiro, G Taki@MAX, Giray, Gökhan Kurt, Büyük Yolculuk, Greg L. Turnquist, H arsh Agarwal, Haz, helio-cf, Henri Fournier, Henri Koskenranta, Henry, Igor Koop, Jack Lukic, Jack Moorhouse, Jack Shelton, jahndan, James Basoo, James Garbutt, James Murty, James Opstad, Jason P. Cochrane, Jett Way, Noble, Jotlockson, Johnny, John, Joel han Ronnenberg, Joost de Valk, Jordan Demaison, Josh Soref, JPette1783, Julian Wolf, Julien Cayzac, Junseong Park, Justin Francos, Kai, kato takeshi, Kedar Vartak, Kendell, Kevin Brown, knj, Koji Wakamiya, Konrad Szajna, Leutam Kristijan, Kyleman Kristijan, KT Marcus, Leonie, Lieke, liruifengv, LongYC, Louis Escher, Luke Deen Taylor, MA2153, Mark Ignacio, Martin DONADIEU, Martin Heidegger, Martin Trapp, Matheus Baroni, Mathieu Mafille, Matthew Justice, Matthias, Matthieu Tremblay, Mavik, Max Malyerkin, Michael Pagédo, maximal, me Misrilal, MkDev11, Mochammad Farros Fatchur Roji, moktamd, Naren, Natan Sągol, Nicolò Paternoster, Ntale Swamadu, oab24413gmai, ocavue, Oliver Speir, oliverlynch, Ossaid, Patrick Linnaurone, Rivere Pharrone.Pierrea, Pierree, Quereepp, RA, Raanelom, Rafael Yasuhide Sudo, Rahul Dogra, Rayan Salhab, Rodrigo Santos, Rohan Santhosh Kumar, Roma, Roma Kholiavko, Sam Richard, sanchezmaldonadojesusadrian14-coder, Sanjaiyan Parthipan, sanjibani, Schahin, Sebastian Shifan Funjintran, Sebastian Funjintran, Clementine, Tay, Tee Ming, thelazylama, Timo Behrmann, tmimmanuel, Tobias Breit, Tom Callahan, Tomasz Cz-Sokołow, travisbreakS, Tristan Bessoussa, Umut Keltek, Utpal Sen, Vagno, Varun Chawla, Victor Yang veShegiyvchet, Vlanchet翠

Astro 7'yi beğeneceğinizi umuyoruz. Sorunlarla karşılaşırsanız veya geri bildiriminizi paylaşmak isterseniz lütfen Discord'da bize katılın, GitHub'da paylaşım yapın veya Bluesky, Twitter ve Mastodon'dan bize ulaşın.

Paylaş: