Eklenti Yaşam Döngüsü
Yükleme Aşaması
Derlemeyi yürütmeden önce, core/registries/pluginRegistry.js'de PluginRegistry.load():
exec.resolve()kullanarak paket yolunu proje kökünden çözer.- Eklenti modülünü dinamik olarak içe aktarır.
- Eklenti nesnesini doğrular: boş olmayan bir
namedizesine sahip, boş olmayan bir nesne olmalıdır. - Kopyaları
nameile reddeder. Map<string, PluginInstance>dosyasındaki önbellekler.- Eklentinin bir
load(ctx)işlevi varsa, onu{ config, paths }ile çağırın.
Kanca Aşamasını Oluşturun
Derleme sırasında (core/scripts/build.js), kancalar şu sabit sırayla yürütülür:
dist:clean-dist/temizlendi ve yeniden oluşturuldu. İçerik işlenmeden önce mevcut olması gereken dosyaları oluşturun.assets:copy- Statik varlıklar kopyalandı. Varlık işlem hatlarını çalıştırın (CSS/JS derlemesi).content:load- Markdown dosyalarıContentRegistry'e yüklendi.ctx.addContent()aracılığıyla ek içerik ekleyin.content:ready- Koleksiyonlar (etiketler, kategoriler, seriler) oluşturuldu. Tam içerik kümesine (RSS, site haritası) dayalı dosyalar oluşturun.
Sayfa Meta Aşaması
page:meta sayfa oluşturma sırasında buildPageMetaWithPlugins()'den tetiklenir. İçerik dosyası başına bir kez çalışır ve şunları alır:
frontMatter- sayfanın ön konu nesnesiderivedFrontMatter- zenginleştirilmiş ön maddelang,slug- sayfa kimliğipageMeta- geçerli meta veriler (değişebilir)setPageMeta(meta)- sayfa meta verilerini değiştirmek için geri aramapages- tam koleksiyon verileri
Kancalar İçinde Yürütme Emri
Eklentiler, plugins yapılandırma dizisinde göründükleri sıraya göre yinelenir. PluginEngine, ekleme sırasını koruyarak Map'yi for...of aracılığıyla yineler.
Kanca Bağlamı Özeti
| Kanca | contentFiles | addContent | pages | footerPolicies | contentIndex | frontMatter | setPageMeta |
|---|---|---|---|---|---|---|---|
dist:clean | - | - | - | - | - | - | - |
assets:copy | - | - | - | - | - | - | - |
content:load | ✓ | ✓ | - | - | - | - | - |
content:ready | ✓ | - | ✓ | ✓ | ✓ | - | - |
page:meta | - | - | çalışma zamanı aracılığıyla | - | - | ✓ | ✓ |
Arıza Semantiği
- Kanca işleyicisinin içindeki bir
throw,PluginEngine.execute()tarafından yakalanır. - Hata
log.err()aracılığıyla günlüğe kaydedilir. - Bu kanca için kalan eklentiler çalışmaya devam eder.
- Yapım bir sonraki aşamaya devam ediyor.
Bu, tek bir eklenti hatasının yapıyı bozmadığı ancak eklenti çıktısının eksik olabileceği anlamına gelir.