Eklenti Sistemine Genel Bakış

Shevky kancaya dayalı bir eklenti modeli kullanıyor. Eklentiler, bir tanım nesnesini dışa aktaran npm paketleridir. Çekirdek bunları konfigürasyondan keşfeder, dinamik olarak içe aktarır ve tanımlanmış yapı yaşam döngüsü noktalarında kanca işleyicilerini çağırır.

Keşif

Eklentiler plugins anahtarının altındaki src/site.json öğesinde listelenir:

"plugins": [
  "@shevky/plugin-robots-txt",
  "@shevky/plugin-tailwindcss",
  "@shevky/plugin-rss"
]

Kayıt Sözleşmesi

Bir eklentinin varsayılan olarak şu şekle uyan bir nesneyi dışa aktarması gerekir:

export default {
  name: "my-plugin",       // unique identifier
  version: "0.0.1",        // semantic version
  hooks: { ... },          // hook handlers
  load: (ctx) => { ... },  // optional initialization
};

Resmi TypeScript türü base/src/plugin.d.ts'de PluginDefinition'dir.

Kanca Yaşam Döngüsü

Derleme hattı kancaları şu sırayla yürütür:

SiparişKancaNe zamanEn İyisi
1dist:cleandist/ oluşturulduktan sonraDağıtım düzeyinde dosyalar oluşturma (robots.txt)
2assets:copyStatik varlıklar kopyalandıktan sonraCSS/JS derlemesi (Tailwind, esbuild)
3content:loadMarkdown dosyaları yüklendikten sonraHarici içerik enjekte etme (addContent)
4content:readyKoleksiyonlar oluşturulduktan sonraYayınlar, site haritaları, SEO meta verileri oluşturma
5page:metaOluşturma sırasında sayfa başınaSayfa düzeyinde meta veri zenginleştirme

1-4 numaralı kancalar derleme başına bir kez çalıştırılır. Hook 5, oluşturulan sayfa başına bir kez çalışır.

Çalışma Zamanı Bağlamı

Her kanca işleyicisi aşağıdakileri içeren bir bağlam nesnesi alır:

  • config - eklentiye özel yapılandırma için get(key) ile tam site yapılandırması
  • log - günlük işlevleri (info, warn, err, debug, step)
  • file - read, write, exists
  • directory - read, exists, create
  • path - combine, resolve, name
  • paths - proje dizinleri (root, src, dist, content, vb.)
  • i18n - uluslararasılaştırma yardımcıları

Kancaya özgü eklemeler:

KancaEkstra Bağlam
content:loadcontentFiles, addContent()
content:readycontentFiles, pages, footerPolicies, contentIndex
page:metafrontMatter, derivedFrontMatter, lang, slug, pageMeta, setPageMeta()

Eklenti Yapılandırması

Eklentiler ayarlarını site.json içindeki pluginConfigs adresinden okur:

"pluginConfigs": {
  "shevky-rss": { "feedFilename": "feed.xml", "feedTtl": 1440 }
}

Çalışma zamanında ctx.config.get("shevky-rss") aracılığıyla erişilir. Anahtar, eklentinin dışa aktarılan name alanıyla eşleşmelidir.

Hata Davranışı

  • Eklenti yükleme hataları yakalanır ve günlüğe kaydedilir; derleme, başarısız eklenti olmadan devam eder.
  • Kanca yürütme hataları yakalanır ve günlüğe kaydedilir; kalan eklentiler ve yapım aşamaları devam ediyor.
  • Sonuç: eklenti çıktısı eksikken derlemeler başarılı olabilir. Derleme günlüklerini kontrol edin.

İlgili