1 puan yazan GN⁺ 2026-06-11 | 1 yorum | WhatsApp'ta paylaş
  • npm install komutunun varsayılan davranışı güvenlik odaklı hale geliyor; şimdiye kadar otomatik çalışan özellikler artık yalnızca kullanıcı açıkça izin verirse (opt-in) çalışacak şekilde değişiyor
  • allowScripts varsayılanı kapalı — kurulan harici paketlerdeki preinstall, install, postinstall betikleri varsayılan olarak engelleniyor ve yalnızca projede izin verilen paketler çalıştırılıyor
    • Yalnızca paketi kurmakla otomatik çalışan betikler engellenerek kötü amaçlı kodların araya girme ihtimali azaltılıyor
    • node-gyp yerel derlemeleri de bu engellemenin kapsamında; bu yüzden yalnızca binding.gyp dosyası olup ayrıca install betiği olmayan paketlerin derlenmesi de engelleniyor (npm dahili olarak node-gyp rebuild çalıştırdığı için)
    • git, file, link ile getirilen paketlerin prepare betikleri de aynı şekilde engelleniyor
    • Kullanım: npm approve-scripts --allow-scripts-pending ile hangi paketlerin betik içerdiğini kontrol et → npm approve-scripts ile yalnızca güvendiklerine izin ver, kalanları npm deny-scripts ile engelle → izin listesi package.json içine kaydedildiği için commit et
  • --allow-git varsayılanı none — Git deposundan doğrudan alınan paketler (onların çektiği bağımlılıklar dahil) varsayılan olarak engelleniyor ve kurulum için --allow-git ile izin verilmesi gerekiyor
    • Bu değişiklik, Git paketi içindeki .npmrc dosyasının Git çalıştırılabilir dosyasını değiştirebildiği yolu kapatıyor (--ignore-scripts kullanılsa bile aşılabilen sorun) (npm 11.10.0+)
  • --allow-remote varsayılanı none — https tarball gibi uzak URL’lerden alınan paketler (geçişli bağımlılıklar dahil) varsayılan olarak engelleniyor ve kurulum için --allow-remote ile izin verilmesi gerekiyor (npm 11.15.0+)
    • Ancak --allow-file ve --allow-directory için varsayılan değerler bu v12 sürümünde değişmiyor
  • Bu değişikliklerin tamamı önce npm 11.16.0 ve sonrasında uyarı biçiminde sunuluyor, böylece resmi sürümden önce kontrol edip hazırlık yapmak mümkün oluyor
  • v12’nin beklenen çıkış zamanı Temmuz 2026

1 yorum

 
GN⁺ 2026-06-11
Hacker News yorumları
  • npm'in GitHub tarafından satın alındığını nasıl kaçırdım bilmiyorum ama birden birçok şey anlam kazanmaya başladı
    Node ekosisteminin bu kadar önemli bir parçası için bundan daha kötü bir yuva düşünmek zor

  • postinstall script'leri çoktan kaldırılmış olmalıydı; NPM paketlerinin kanseri gibiler
    Bir şey indirirken derinlere gömülü, kontrolsüz postinstall'ların rastgele çalıştırılması çok sık oluyor
    Bir noktada bunun iyi bir fikir olduğunu kim düşündü bilmiyorum

    • post-install script'lerine yönelik kaygının özünü pek anlayamıyorum
      Normalde paketlenmiş bağımlılık kodunu zaten bir noktada çalıştırıyorsunuz ve çoğu durumda kurulum süreciyle aynı yetkilerle çalışıyor
      O zaman bu tür kurulum script'leri, iyi ya da kötü, giriş noktasını npm'den import ya da require çağrısının olduğu yere taşımış olur
      Tüm ekosistem Deno benzeri sandbox ortamlarına geçmedikçe, en fazla küçük bir engel gibi görünüyor. Belki plan da budur
    • Kesinlikle öyle yapılmamalı ve birçok geçerli kullanım örneği var
      Aklıma ilk gelen örnek https://www.npmjs.com/package/patch-package
      Umarım şu anki histeri bu tür boş kararlarla sonuçlanmaz
  • Bu konu ilk kez 10 yıl önce gündeme geldiğinden beri NPM içinde yüzlerce kez tartışılmıştır diye tahmin ediyorum
    Shai Halud yüzünden artık görmezden gelinemeyecek kadar büyüdü

    • JavaScript'in tarihi neredeyse geliştirici usulü düşünme biçiminin damıtılmış hali gibi, hoşuma gidiyor
      “Birazdan düzeltiriz” neredeyse her zaman “Lanet olsun, şimdi düzeltmemiz gerekiyor”a dönüşüyor
    • Güzel, sırada Python var
  • Mevcut LTS Node sürümlerinin, yanlış hatırlamıyorsam 22, 24, 26'nın, bu güvenlik düzeltmesinden yararlanmak için birlikte gelen npm'i v12'ye yükseltmeyi planlayıp planlamadığını merak ediyorum
    Şu anda hepsi npm v11 içeriyor

    • Geçmişte Node'nun ara sürümlerinde npm majör sürüm yükseltmeleri olmuştu
      v18.19.0[1] ve v20.10.0[2] ile npm 9'dan 10'a geçildi
      [1]: https://nodejs.org/en/blog/release/v18.19.0#npm-updated-to-v...
      [2]: https://nodejs.org/en/blog/release/v20.10.0
    • Varsayılan değişikliği olduğu için bunu güvenlik duruşunda bir değişim olarak görebilirsiniz ama güvenlik düzeltmesinin kendisi zaten herkesin bugün uygulayabileceği bir şey
      Yazıda dendiği gibi uygun varsayılanları ayarlamak yeterli
      Bu değişikliğin en iyi yanı, varsayılanlar değişince yeni geliştiricilerin sadece install çalıştırdıklarında bu ayarların açık olduğunu varsayan sinir bozucu paketlerin hemen bozulduğunu görecek olmaları
      Örneğin script'lerin çalışabilir olmasını bekleyen alışkanlığın sona ermesine yardımcı olabilir
  • Yazıdan tam net değil ama script izin listesinin genel bir ayar değil, paket bazında izin vermeyi desteklediği anlaşılıyor
    Yalnızca belirli paketler için script'lere izin veren organizasyon düzeyi kuralları sürdürmek daha kolay olabilir
    Paket yöneticisi ayarlarında bu şekilde güvensiz varsayılanları engellemek için kullanılabilecek bir linter olup olmadığını merak ediyorum

    • grep yetmez mi?
  • Hâlâ Yarn kullanmak için bir neden olup olmadığını merak ediyorum
    Yarn'ın da tedarik zinciri saldırılarını önlemeye yönelik korumalar uygulayıp uygulamadığını bilmiyorum
    Şimdiye kadar sadece pnpm'i biliyordum; npm'in de yetişmesi güzel

    • Elbette var
      En yeni Yarn sürümü olan 4.x, neredeyse aşırıya kaçacak kadar deterministik davranış sağlıyor ve ekip genelinde tutarlı sonuçlar bekleyebiliyorsunuz
      Özellik tarafında küçük gibi görünen birçok ayrıntı var ve alışınca birleşip büyük fark yaratıyorlar
      Bir sonraki majör sürüm de daha iyi performans ve bu performans iyileştirmelerine dayanarak şimdiye kadar uygulanamayan özelliklerle aynı yönde ilerleyecek
      Bu arada Yarn'ın baş bakımcısıyım
    • İlk günlerinden v3'e kadar Yarn kullanan bir projede çalıştım; aşırı yavaş ama çalışıyor
      Tedarik zinciri koruma özellikleri de var
      Sonunda dayanamadık ve pnpm'e geçtik; hem CI'da hem yerel geliştirme makinelerinde kurulumlar çok daha hızlı oldu
      LLM yardımıyla migrasyon yaklaşık bir gün sürdü
    • Fark yaratan yönlerden biri seçilebilir kurulum stratejisi; paketleri node_modules içine açmak yerine sıkıştırılmış arşivlerden doğrudan çalıştırabiliyor
      https://yarnpkg.com/features/pnp
      Java'da .class dosya dizin ağacı yerine .jar kullanmaya epey benziyor
      Yine de biraz hacky ve editörlerle araç desteği tutarsız
      Küçük dosya sayısı çok daha az olduğu için, mecburen Windows'ta çalışıyorsanız özellikle daha hızlı olabilir
      Arşivleri git deposuna da koyabiliyorsunuz; böylece internete ve paket kayıtlarına bağımlılığı ortadan kaldırabiliyorsunuz
    • NPM'in ne yaptığını bilmiyorum ama Yarn, NPM'den bağımlılık kurulumunda çok daha hızlı
    • Yorumu­ma eksi oy verenler soruya cevap da verebilir
      Gerçekten bilmiyorum
  • npm'in GitHub'a ait olduğunu bilmiyordum
    Bu da birçok şeyi açıklıyor

    • NPM Is Joining GitHub - https://news.ycombinator.com/item?id=22594549 (16 Mart 2020, 571 yorum, 1829 puan) - https://github.blog/news-insights/company-news/npm-is-joinin...
      Bazı kısımlar zaman geçtikten sonra ilginç okunuyor
      En üstteki yorum şuydu: “Microsoft her şeyi doğru yapmıyor ama GitHub satın alımı açıkçası beklediğimden çok daha iyi gitti. Microsoft merkezli politikaları GitHub'a dayatmak yerine Microsoft, ürün açısından GitHub'ın yaptıklarını daha çok benimsedi. GitHub hâlâ ayrı bir şirket gibi işletiliyor.”
    • NPM şirketi 2020'de neredeyse batmak üzereydi
      Girişim sermayesi almıştı ama sürdürülebilir bir iş modeli bulamamıştı
      GitHub ekosistemi kurtarmak için satın aldı ve bu satın almanın GitHub'a da pek somut bir faydası olmadı
    • Çoğu kişi bunu biliyor ama gerçekten birçok şeyi açıklamasının sebebi GitHub'ın Microsoft'a ait olması
      Ve Microsoft, GitHub'ı Azure'a taşıdı
    • GitHub'a ait olduğunu biliyordum ama npm blogu yerine doğrudan GitHub blogundaki sürüm notlarını ilk kez görüyorum
  • package.json içindeki izin listesinin paket sürümünü de sabitleyip sabitlemediğini, yoksa yalnızca paket adını mı sabitlediğini merak ediyorum

  • allowScripts varsayılanının kapalı olması güzel
    [Saate bakar] pnpm'i takip etmeleri sadece 18 ay mı sürdü?

    • Java'nın Maven'ında böyle bir şey yoktu ve buna ihtiyaç duyduğumu da hiç hissetmedim
      JavaScript tarafında bunun amacı ne?