Phantom Vendor Builder¶
Bu Araç Ne İşe Yarar?¶
Phantom Vendor Builder, Phantom Documentation Kit'in JavaScript ve CSS bağımlılıklarını otomatik olarak yöneten bir araçtır. Dokümantasyon sitenizde kullanılan Chart.js, Font Awesome gibi üçüncü parti kütüphaneleri tek bir yerden yönetmenizi sağlar.
Neden Gerekli?
Manuel olarak her kütüphaneyi indirip, doğru dizine kopyalamak yerine, bu araç tüm süreci otomatikleştirir.
Siz sadece serve.py veya build.py komutunu çalıştırırsınız, gerisini Vendor Builder halleder.
Çalışma Akışı¶
Vendor Builder tamamen otomatik çalışır. Siz python serve.py komutunu çalıştırdığınızda arka planda şunlar olur:
Detaylı Akış Diyagramı¶
graph TB
Start([python serve.py]) --> CheckConfig{Vendor kontrolü<br/>aktif mi?}
CheckConfig -->|Hayır| MkDocs[MkDocs Başlat]
CheckConfig -->|Evet| CheckVendor[VendorManager.check_dependencies]
CheckVendor --> VendorExists{vendor/ dizini ve<br/>tüm dosyalar var mı?}
VendorExists -->|Evet| MkDocs
VendorExists -->|Hayır| CheckNode{Node.js<br/>kurulu mu?}
CheckNode -->|Hayır| Error1[Hata: Node.js gerekli]
CheckNode -->|Evet| BuildProcess[VendorManager.build_dependencies]
BuildProcess --> NPMCheck{node_modules<br/>var mı?}
NPMCheck -->|Hayır| NPMInstall[npm install]
NPMCheck -->|Evet| RunBuild
NPMInstall --> RunBuild[npm run build]
RunBuild --> BuildJS[build.js çalışır]
BuildJS --> ReadDeps[dependencies.json oku]
ReadDeps --> ProcessLoop[Kullanıcı bağımlılıklarını işle]
ProcessLoop --> MinifyCheck{Minify<br/>gerekli mi?}
MinifyCheck -->|Evet & JS| TerserOpt[Terser ile optimize et<br/>.min.js olarak kaydet]
MinifyCheck -->|Evet & CSS| CSSNanoOpt[cssnano ile optimize et<br/>.min.css olarak kaydet]
MinifyCheck -->|Hayır| DirectCopy[Doğrudan kopyala]
TerserOpt --> SaveVendor[vendor/ dizinine kaydet]
CSSNanoOpt --> SaveVendor
DirectCopy --> SaveVendor
SaveVendor --> NextDep{Başka<br/>bağımlılık var mı?}
NextDep -->|Evet| ProcessLoop
NextDep -->|Hayır| ProcessFA[processFontAwesome<br/>CSS ve Webfonts]
ProcessFA --> Success[Build tamamlandı]
Success --> MkDocs
style Start fill:#2196F3,color:#fff
style Success fill:#4CAF50,color:#fff
style Error1 fill:#f44336,color:#fff
style TerserOpt fill:#FF9800,color:#fff
style CSSNanoOpt fill:#FF9800,color:#fff
style ProcessFA fill:#9C27B0,color:#fff
style MkDocs fill:#4CAF50,color:#fff
Konfigürasyon¶
dependencies.json Dosyası¶
Tüm bağımlılıklarınız tools/vendor-builder/dependencies.json dosyasında tanımlanır:
{
"dependencies": [
{
"name": "Chart.js",
"package": "chart.js",
"from": "node_modules/chart.js/dist/chart.umd.js",
"to": "chart.umd.js",
"type": "js",
"minify": true
}
]
}
Parametre Açıklamaları¶
| Parametre | Açıklama | Örnek Değer |
|---|---|---|
name |
Kütüphanenin okunabilir adı | "Chart.js" |
package |
npm paket adı | "chart.js" |
from |
Kaynak dosya yolu (node_modules içinde) | "node_modules/chart.js/..." |
to |
Hedef dosya adı (vendor dizininde) | "chart.umd.js" |
type |
Dosya tipi | "js" veya "css" |
minify |
Minifikasyon uygulanacak mı? | true veya false |
Dizin Yapısı¶
Vendor Builder Aracı Dizin Yapısı¶
Örnek Çıktı Dizini Yapısı¶
overrides/assets/vendor/
├── chart.umd.js
├── fontawesome-all.min.css
└── webfonts/
├── fa-brands-400.ttf
├── fa-regular-400.ttf
└── fa-solid-900.ttf
Optimizasyon Özelleştirmesi¶
Mevcut Optimizasyon Ayarları¶
Vendor Builder, Terser (JavaScript) ve cssnano (CSS) kullanarak güçlü bir optimizasyon altyapısı sunar. Bu araçlar endüstri standardıdır ve yüksek performanslı çıktılar üretir.
Varsayılan JavaScript Optimizasyonu (Terser):
- Debugger ifadeleri kaldırılır
- Console.log'lar korunur (development için)
- Safari 10+ uyumluluğu sağlanır
- Tüm yorumlar temizlenir
Varsayılan CSS Optimizasyonu (cssnano):
- Gereksiz boşluklar kaldırılır
- Renk değerleri optimize edilir (#ffffff → #fff)
- Font tanımları birleştirilir
- Gradient'ler sadeleştirilir
Özelleştirme Nasıl Yapılır?¶
Optimizasyon ayarlarını değiştirmek için build.js dosyasındaki ilgili fonksiyonları düzenleyin:
JavaScript için (satır 370-384):
async function minifyJavaScript(content, filename) {
const result = await minify(content, {
compress: {
drop_console: false,
drop_debugger: true,
pure_funcs: ['console.log']
},
mangle: {
safari10: true
},
format: {
comments: false
}
});
}
CSS için (satır 398-410):
async function minifyCSS(content, filename) {
const result = await postcss([cssnano({
preset: ['default', {
discardComments: { removeAll: true },
normalizeWhitespace: true,
colormin: true,
minifyFontValues: true,
minifyGradients: true
}]
})]).process(content, { from: filename });
}
Optimizasyon Kontrolü¶
Her bağımlılık için optimizasyon dependencies.json dosyasından kontrol edilir:
minify: true→ Dosya optimize edilirminify: false→ Dosya olduğu gibi kopyalanır
İpucu: Zaten minified olan dosyalar (.min.js, .min.css) için minify: false kullanın, gereksiz işlem yapmayın.