Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Electron'da `asar` Dosyasından Runtime'da Okuma Yapmak: Senkron/Asenkron Kabusu

✖ Kapat
Duyuru
✖ Kapat
Duyuru

websterx

Okur Üye
Üye
Katılım
14 Mart 2026
Mesajlar
53
💀 "Bu Dosya Neden Yok?!" İsyanı

Geçenlerde bir Electron uygulaması için küçük bir konfigürasyon yöneticisi yazıyordum. Amacım, uygulama paketlendikten sonra bile, `asar` arşivinin içine gömülü bir JSON dosyasını okuyup, kullanıcı ayarlarıyla birleştirmekti. "Kolay iş" diye düşündüm, `fs` modülü var ya...

Meğerse kabus orada başlıyormuş.

🔍 fs.readFileSync vs. fs.promises.readFile Karmaşası

İlk denemem, her zamanki gibi senkron okumaydı. Geliştirme ortamında (yani `asar` paketlenmemişken) mükemmel çalışıyordu.

JavaScript:
const configPath = path.join(__dirname, 'config', 'defaults.json');
const defaultConfig = JSON.parse(fs.readFileSync(configPath, 'utf8'));

Ancak, uygulamayı build edip `asar` paketine aldığım anda, her şey yıkıldı. Konsol, o meşhur `ENOENT` (No such file or directory) hatasını fırlatmaya başladı. Dosya orada ama sistem göremiyor! Kafayı yiyecektim.

⚡ Electron'un `asar` Support'u ve Asenkron Zorunluluğu

Biraz araştırınca (yani StackOverflow'da deli gibi scroll edince) olayı çözdüm. Electron, `asar` arşivinden dosya okurken senkron `fs` metodlarını desteklemiyor! Bunun yerine, asenkron metodları (`fs.promises.readFile` gibi) kullanman ya da Electron'un kendi `asar` modülünü (`original-fs` gibi) işin içine katman gerekiyor.

Yani, o güvenli, rahat senkron dünyadan çıkıp, `async/await` veya `.then()` cehennemine dalmak zorundaydım. Tüm fonksiyon zincirimi yeniden yazdım.

JavaScript:
const fs = require('fs').promises; // veya require('fs/promises')
async function loadConfig() {
    try {
        const configPath = path.join(__dirname, 'config', 'defaults.json');
        const data = await fs.readFile(configPath, 'utf8');
        return JSON.parse(data);
    } catch (error) {
        console.error('[B]Config[/B] okuma hatası:', error);
        return {};
    }
}

✅ Çözüm ve Sonuçta Elde Ettiğim Ders

Sonuç olarak, Electron ile `asar` paketlenmiş dosyalar üzerinde çalışırken, direkt `fs.readFileSync` kullanma. Her zaman asenkron yöntemlere (`fs.promises`) yönel. Veya daha derinlemesine kontrol için `original-fs` modülüne bak.

Şaka gibi ama, iki satırlık bir dosya okuma işlemi için saatlerimi harcadım. Geliştirme (unpacked) ve production (packed) ortamları arasındaki bu fark, gerçekten sinsi bir tuzak.

Siz de Electron'da `asar` ile çalışırken böyle tuhaf senkron/asenkron geçiş sorunları yaşadınız mı? `original-fs` kullanmak bu tarz durumlarda daha mı güvenli, yoksa `fs.promises` yeterli mi?
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri