EMZETT.
Giriş yap

Kilit dosyaları ve yeniden üretilebilir derlemeler: her yerde aynı sürümler

Kısaca: Bir kilit dosyası (lockfile), tüm paketlerin kurulu tam sürümlerini kaydeder; böylece geliştirme, CI ve üretim aynı durumu kullanır ve derlemeler yeniden üretilebilir kalır.

Biraz daha ayrıntılı: package.json içinde "express": "^4.18.0" yazar; bu “4.18.0 veya daha yeni 4.x” demektir. Başka önlem olmadan her makine zamana bağlı olarak farklı sürümler kurar: “bende çalışıyor” bir soruna dönüşür. Kilit dosyası bunu çözer.

Ayrıntılı

İçinde ne var?

Bir kilit dosyası tüm doğrudan ve geçişli (transitive) bağımlılıkları tam sürüm, sağlama toplamı (hash) ve kaynakla içerir. Örnekler: package-lock.json (npm), pnpm-lock.yaml, yarn.lock, Cargo.lock (Rust), poetry.lock/uv.lock (Python), Gemfile.lock, composer.lock, go.sum. Araç tarafından üretilir, elle düzenlenmez.

Doğru kullanmak

  • Kilit dosyasını depoya işleyin (uygulamalar için; kütüphaneler için kurala bağlı, CI için mantıklı).
  • CI ve dağıtımda kilit dosyasıyla kurun: npm ci (npm install yerine), pip install -r requirements.txt --require-hashes, cargo build --locked. Kilit dosyası ile package.json uyuşmuyorsa npm ci durur.
  • Güncellemeleri bilinçli yapın (npm update, Dependabot/Renovate), kilit dosyasındaki değişiklikleri çekme isteğinde inceleyin.
  • Kilit dosyasındaki birleştirme çakışmaları: elle birleştirmeyin; package.json’u çözün ve kilit dosyasının yeniden üretilmesine izin verin.

Yeniden üretilebilir derlemeler

Hedef: aynı girdiler → aynı sonuç (bit bit). Bunun için: kilit dosyaları, sabitlenmiş araç sürümleri (.nvmrc, .tool-versions, engines), sabit temel imajlı konteynerler (latest yerine özet/digest), derlemede zaman damgası yok, deterministik sıralama. Bu, sorun gidermeyi, geri almaları, güvenlik denetimlerini (SBOM, imzalar) ve yayımlanmış bir artifact’in kaynak koduyla eşleştiği güvenini kolaylaştırır.

Güvenlik

Özetli (hash) kilit dosyaları, bir paketin sonradan değiştirilmesine karşı korur. Çekme isteklerinde değiştirilmiş kilit dosyalarını denetleyin (farklı kayıt defteri URL’si). Denetim için özel kayıt defterleri/vekil sunucular (Artifactory, Verdaccio) kullanın. Açık ad alanları (scopes) ve kayıt defteri yapılandırmasıyla bağımlılık karışıklığından kaçınırsınız.

Ayrıca bak: Anlamsal sürümleme, Dependabot ve Renovate, Bağımlılıklar ve kütüphaneler