Vite Entegrasyonu
Modern JavaScript uygulamaları gelişmiş derleme araçları gerektirir. Nette Assets, yeni nesil ön uç derleme aracı olan Vite ile birinci sınıf entegrasyon sağlar. Sıfır yapılandırma zahmetiyle Hot Module Replacement (HMR) ile ışık hızında geliştirme ve optimize edilmiş üretim derlemeleri elde edin.
- Sıfır yapılandırma – Vite ve PHP şablonları arasında otomatik köprü
- Tam bağımlılık yönetimi – tek bir etiket tüm varlıkları yönetir
- Hot Module Replacement – anında JavaScript ve CSS güncellemeleri
- Optimize edilmiş üretim derlemeleri – kod bölme ve ağaç sallama
Nette Assets, Vite ile sorunsuz bir şekilde entegre olur, böylece şablonlarınızı her zamanki gibi yazarken tüm bu avantajlardan yararlanırsınız.
Vite Kurulumu
Vite'ı adım adım kuralım. Derleme araçlarına yeni başlıyorsanız endişelenmeyin – her şeyi açıklayacağız!
Adım 1: Vite'ı Kurun
Önce, Vite'ı ve Nette eklentisini projenize kurun:
npm install -D vite @nette/vite-plugin
Bu, Vite'ı ve Vite'ın Nette ile mükemmel çalışmasına yardımcı olan özel bir eklentiyi kurar.
Adım 2: Proje Yapısı
Standart yaklaşım, kaynak varlık dosyalarını proje kökünüzdeki bir assets/
klasörüne ve derlenmiş
sürümlerini www/assets/
'ye yerleştirmektir:
web-project/ ├── assets/ ← kaynak dosyalar (SCSS, TypeScript, kaynak görseller) │ ├── public/ ← statik dosyalar (olduğu gibi kopyalanır) │ │ └── favicon.ico │ ├── images/ │ │ └── logo.png │ ├── app.js ← ana giriş noktası │ └── style.css ← stilleriniz └── www/ ← public dizini (belge kökü) ├── assets/ ← derlenmiş dosyalar buraya gidecek └── index.php
assets/
klasörü, kaynak dosyalarınızı – yazdığınız kodu – içerir. Vite bu dosyaları işleyecek ve
derlenmiş sürümlerini www/assets/
'ye koyacaktır.
Adım 3: Vite'ı Yapılandırın
Proje kökünüzde bir vite.config.ts
dosyası oluşturun. Bu dosya, Vite'a kaynak dosyalarınızı nerede
bulacağını ve derlenmiş dosyaları nereye koyacağını söyler.
Nette Vite eklentisi, yapılandırmayı basitleştiren akıllı varsayılan ayarlarla gelir. Ön uç kaynak dosyalarınızın
assets/
dizininde (root
seçeneği) olduğunu ve derlenmiş dosyaların www/assets/
'ye
gittiğini (outDir
seçeneği) varsayar. Yalnızca giriş noktasını belirtmeniz
gerekir:
import { defineConfig } from 'vite';
import nette from '@nette/vite-plugin';
export default defineConfig({
plugins: [
nette({
entry: 'app.js',
}),
],
});
Varlıklarınızı derlemek için başka bir dizin adı belirtmek isterseniz, birkaç seçeneği değiştirmeniz gerekecektir:
export default defineConfig({
root: 'assets', // kaynak varlıkların kök dizini
build: {
outDir: '../www/assets', // derlenmiş dosyaların gideceği yer
},
// ... diğer yapılandırma ...
});
outDir
yolu, root
'a göreli olarak kabul edilir, bu yüzden başında ../
vardır.
Adım 4: Nette'i Yapılandırın
common.neon
dosyanızda Nette Assets'e Vite hakkında bilgi verin:
assets:
mapping:
default:
type: vite # Nette'e ViteMapper'ı kullanmasını söyler
path: assets
Adım 5: Betikleri Ekleyin
Bu betikleri package.json
dosyanıza ekleyin:
{
"scripts": {
"dev": "vite",
"build": "vite build"
}
}
Şimdi şunları yapabilirsiniz:
npm run dev
– sıcak yeniden yükleme ile geliştirme sunucusunu başlatnpm run build
– optimize edilmiş üretim dosyaları oluştur
Giriş Noktaları
Bir giriş noktası, uygulamanızın başladığı ana dosyadır. Bu dosyadan diğer dosyaları (CSS, JavaScript modülleri, görseller) içe aktararak bir bağımlılık ağacı oluşturursunuz. Vite bu içe aktarmaları takip eder ve her şeyi bir araya getirir.
Örnek giriş noktası assets/app.js
:
// Stilleri içe aktar
import './style.css'
// JavaScript modüllerini içe aktar
import netteForms from 'nette-forms';
import naja from 'naja';
// Uygulamanızı başlat
netteForms.initOnLoad();
naja.initialize();
Şablonda bir giriş noktasını şu şekilde ekleyebilirsiniz:
{asset 'app.js'}
Nette Assets, tüm gerekli HTML etiketlerini (JavaScript, CSS ve diğer bağımlılıklar) otomatik olarak oluşturur.
Birden Çok Giriş Noktası
Daha büyük uygulamalar genellikle ayrı giriş noktalarına ihtiyaç duyar:
export default defineConfig({
plugins: [
nette({
entry: [
'app.js', // public sayfalar
'admin.js', // yönetici paneli
],
}),
],
});
Bunları farklı şablonlarda kullanın:
{* Public sayfalarda *}
{asset 'app.js'}
{* Yönetici panelinde *}
{asset 'admin.js'}
Önemli: Kaynak vs. Derlenmiş Dosyalar
Üretimde yalnızca şunları yükleyebileceğinizi anlamak çok önemlidir:
entry
içinde tanımlanan Giriş noktalarıassets/public/
dizinindeki dosyalar
{asset}
kullanarak assets/
içindeki rastgele dosyaları yükleyemezsiniz – yalnızca JavaScript
veya CSS dosyaları tarafından referans verilen varlıkları yükleyebilirsiniz. Dosyanız hiçbir yerde referans verilmiyorsa
derlenmeyecektir. Vite'ın diğer varlıklardan haberdar olmasını istiyorsanız, onları public
klasörüne taşıyabilirsiniz.
Varsayılan olarak, Vite'ın 4KB'den küçük tüm varlıkları satır içine alacağını unutmayın, bu nedenle bu dosyalara doğrudan referans veremeyeceksiniz. (Bkz. Vite dokümantasyonu).
{* ✓ Bu çalışır - bir giriş noktasıdır *}
{asset 'app.js'}
{* ✓ Bu çalışır - assets/public/ içinde *}
{asset 'favicon.ico'}
{* ✗ Bu çalışmaz - assets/ içinde rastgele bir dosya *}
{asset 'components/button.js'}
Geliştirme Modu
Geliştirme modu tamamen isteğe bağlıdır ancak etkinleştirildiğinde önemli faydalar sağlar. Ana avantajı Hot Module Replacement (HMR)'dır – uygulama durumunu kaybetmeden anında değişiklikleri görün, bu da geliştirme deneyimini çok daha pürüzsüz ve hızlı hale getirir.
Vite, geliştirmeyi inanılmaz hızlı hale getiren modern bir derleme aracıdır. Geleneksel paketleyicilerin aksine, Vite geliştirme sırasında kodunuzu doğrudan tarayıcıya sunar, bu da projenizin ne kadar büyük olursa olsun anında sunucu başlangıcı ve ışık hızında güncellemeler anlamına gelir.
Geliştirme Sunucusunu Başlatma
Geliştirme sunucusunu çalıştırın:
npm run dev
Şunları göreceksiniz:
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
Geliştirme yaparken bu terminali açık tutun.
Nette Vite eklentisi otomatik olarak şunları algılar:
- Vite geliştirme sunucusu çalışıyor
- Nette uygulamanız hata ayıklama modunda
Her iki koşul da karşılandığında, Nette Assets dosyaları derlenmiş dizin yerine Vite geliştirme sunucusundan yükler:
{asset 'app.js'}
{* Geliştirmede: <script src="http://localhost:5173/app.js" type="module"></script> *}
{* Üretimde: <script src="/assets/app-4a8f9c7.js" type="module"></script> *}
Yapılandırmaya gerek yok – sadece çalışır!
Farklı Alan Adlarında Çalışma
Geliştirme sunucunuz localhost
dışında bir şey üzerinde çalışıyorsa (örneğin
myapp.local
), CORS (Cross-Origin Resource Sharing) sorunlarıyla karşılaşabilirsiniz. CORS, web tarayıcılarında
varsayılan olarak farklı alan adları arasındaki istekleri engelleyen bir güvenlik özelliğidir. PHP uygulamanız
myapp.local
üzerinde çalışırken Vite localhost:5173
üzerinde çalıştığında, tarayıcı
bunları farklı alan adları olarak görür ve istekleri engeller.
Bu sorunu çözmek için iki seçeneğiniz var:
Seçenek 1: CORS'u Yapılandırın
En basit çözüm, PHP uygulamanızdan çapraz kaynak isteklerine izin vermektir:
export default defineConfig({
// ... diğer yapılandırma ...
server: {
cors: {
origin: 'http://myapp.local', // PHP uygulamanızın URL'si
},
},
});
Seçenek 2: Vite'ı alan adınızda çalıştırın
Diğer çözüm, Vite'ı PHP uygulamanızla aynı alan adında çalıştırmaktır.
export default defineConfig({
// ... diğer yapılandırma ...
server: {
host: 'myapp.local', // PHP uygulamanızla aynı
},
});
Aslında, bu durumda bile CORS'u yapılandırmanız gerekir çünkü geliştirme sunucusu aynı ana bilgisayar adında ancak farklı bir bağlantı noktasında çalışır. Ancak, bu durumda CORS, Nette Vite eklentisi tarafından otomatik olarak yapılandırılır.
HTTPS Geliştirme
HTTPS üzerinde geliştirme yapıyorsanız, Vite geliştirme sunucunuz için sertifikalara ihtiyacınız vardır. En kolay yol, sertifikaları otomatik olarak oluşturan bir eklenti kullanmaktır:
npm install -D vite-plugin-mkcert
İşte vite.config.ts
'de nasıl yapılandırılacağı:
import mkcert from 'vite-plugin-mkcert';
export default defineConfig({
// ... diğer yapılandırma ...
plugins: [
mkcert(), // sertifikaları otomatik olarak oluşturur ve https'yi etkinleştirir
nette(),
],
});
CORS yapılandırmasını (yukarıdaki Seçenek 1) kullanıyorsanız, kaynak URL'yi http://
yerine
https://
kullanacak şekilde güncellemeniz gerektiğini unutmayın.
Üretim Derlemeleri
Optimize edilmiş üretim dosyaları oluşturun:
npm run build
Vite şunları yapacaktır:
- Tüm JavaScript ve CSS'yi küçültür
- Kodu optimal parçalara böler
- Önbellek temizleme için karma adlandırılmış dosyalar oluşturur
- Nette Assets için bir manifest dosyası oluşturur
Örnek çıktı:
www/assets/
├── app-4f3a2b1c.js # Ana JavaScript'iniz (küçültülmüş)
├── app-7d8e9f2a.css # Çıkarılan CSS (küçültülmüş)
├── vendor-8c4b5e6d.js # Paylaşılan bağımlılıklar
└── .vite/
└── manifest.json # Nette Assets için eşleştirme
Karma adlandırılmış dosyalar, tarayıcıların her zaman en son sürümü yüklemesini sağlar.
Public Klasörü
assets/public/
dizinindeki dosyalar, işlenmeden çıktı dizinine kopyalanır:
assets/
├── public/
│ ├── favicon.ico
│ ├── robots.txt
│ └── images/
│ └── og-image.jpg
├── app.js
└── style.css
Onlara normal şekilde referans verin:
{* Bu dosyalar olduğu gibi kopyalanır *}
<link rel="icon" href={asset 'favicon.ico'}>
<meta property="og:image" content={asset 'images/og-image.jpg'}>
Public dosyalar için FilesystemMapper özelliklerini kullanabilirsiniz:
assets:
mapping:
default:
type: vite
path: assets
extension: [webp, jpg, png] # Önce WebP'yi dene
versioning: true # Önbellek temizleme ekle
vite.config.ts
yapılandırmasında publicDir
seçeneğini kullanarak public klasörünü
değiştirebilirsiniz.
Dinamik İçe Aktarmalar
Vite, optimal yükleme için kodu otomatik olarak böler. Dinamik içe aktarmalar, kodu yalnızca gerçekten ihtiyaç duyulduğunda yüklemenize olanak tanır, bu da başlangıç paketi boyutunu azaltır:
// Ağır bileşenleri talep üzerine yükle
button.addEventListener('click', async () => {
let { Chart } = await import('./components/chart.js')
new Chart(data)
})
Dinamik içe aktarmalar, yalnızca gerektiğinde yüklenen ayrı yığınlar oluşturur. Buna “kod bölme” denir ve Vite'ın en güçlü özelliklerinden biridir. Dinamik içe aktarmaları kullandığınızda, Vite her dinamik olarak içe aktarılan modül için otomatik olarak ayrı JavaScript dosyaları oluşturur.
{asset 'app.js'}
etiketi bu dinamik yığınları otomatik olarak ön yüklemez. Bu kasıtlı bir
davranıştır – asla kullanılmayabilecek kodu indirmek istemeyiz. Yığınlar yalnızca dinamik içe aktarma
yürütüldüğünde indirilir.
Ancak, belirli dinamik içe aktarmaların kritik olduğunu ve yakında ihtiyaç duyulacağını biliyorsanız, bunları ön yükleyebilirsiniz:
{* Ana giriş noktası *}
{asset 'app.js'}
{* Kritik dinamik içe aktarmaları ön yükle *}
{preload 'components/chart.js'}
Bu, tarayıcıya grafik bileşenini arka planda indirmesini söyler, böylece ihtiyaç duyulduğunda hemen hazır olur.
TypeScript Desteği
TypeScript kutudan çıktığı gibi çalışır:
// assets/main.ts
interface User {
name: string
email: string
}
export function greetUser(user: User): void {
console.log(`Merhaba, ${user.name}!`)
}
TypeScript dosyalarına normal şekilde referans verin:
{asset 'main.ts'}
Tam TypeScript desteği için kurun:
npm install -D typescript
Ek Vite Yapılandırması
İşte ayrıntılı açıklamalarla bazı kullanışlı Vite yapılandırma seçenekleri:
export default defineConfig({
// Kaynak varlıkları içeren kök dizin
root: 'assets',
// İçeriği çıktı dizinine olduğu gibi kopyalanan klasör
// Varsayılan: 'public' ('root'a göreli)
publicDir: 'public',
build: {
// Derlenmiş dosyaları nereye koymalı ('root'a göreli)
outDir: '../www/assets',
// Derlemeden önce çıktı dizinini boşaltmalı mı?
// Önceki derlemelerden kalan eski dosyaları kaldırmak için kullanışlıdır
emptyOutDir: true,
// Oluşturulan yığınlar ve varlıklar için outDir içindeki alt dizin
// Bu, çıktı yapısını düzenlemeye yardımcı olur
assetsDir: 'static',
rollupOptions: {
// Giriş noktası/noktaları - tek bir dosya veya dosya dizisi olabilir
// Her giriş noktası ayrı bir paket haline gelir
input: [
'app.js', // ana uygulama
'admin.js', // yönetici paneli
],
},
},
server: {
// Geliştirme sunucusunu bağlamak için ana bilgisayar
// Ağa açmak için '0.0.0.0' kullanın
host: 'localhost',
// Geliştirme sunucusu için bağlantı noktası
port: 5173,
// Çapraz kaynak istekleri için CORS yapılandırması
cors: {
origin: 'http://myapp.local',
},
},
css: {
// Geliştirmede CSS kaynak haritalarını etkinleştir
devSourcemap: true,
},
plugins: [
nette(),
],
});
Hepsi bu kadar! Artık Nette Assets ile entegre modern bir derleme sisteminiz var.