npm installkomutunun 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şiyorallowScriptsvarsayılanı kapalı — kurulan harici paketlerdekipreinstall,install,postinstallbetikleri 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-gypyerel derlemeleri de bu engellemenin kapsamında; bu yüzden yalnızcabinding.gypdosyası olup ayrıca install betiği olmayan paketlerin derlenmesi de engelleniyor (npmdahili olaraknode-gyp rebuildçalıştırdığı için)git,file,linkile getirilen paketlerinpreparebetikleri de aynı şekilde engelleniyor- Kullanım:
npm approve-scripts --allow-scripts-pendingile hangi paketlerin betik içerdiğini kontrol et →npm approve-scriptsile yalnızca güvendiklerine izin ver, kalanlarınpm deny-scriptsile engelle → izin listesipackage.jsoniçine kaydedildiği için commit et
--allow-gitvarsayı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-gitile izin verilmesi gerekiyor- Bu değişiklik, Git paketi içindeki
.npmrcdosyasının Git çalıştırılabilir dosyasını değiştirebildiği yolu kapatıyor (--ignore-scriptskullanılsa bile aşılabilen sorun) (npm 11.10.0+)
- Bu değişiklik, Git paketi içindeki
--allow-remotevarsayı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-remoteile izin verilmesi gerekiyor (npm 11.15.0+)- Ancak
--allow-fileve--allow-directoryiçin varsayılan değerler bu v12 sürümünde değişmiyor
- Ancak
- 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
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
https://github.blog/news-insights/company-news/npm-is-joinin...
“Kucakla, genişlet, yok et”
https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguis...
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
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
importya darequireçağrısının olduğu yere taşımış olurTü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
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ü
“Birazdan düzeltiriz” neredeyse her zaman “Lanet olsun, şimdi düzeltmemiz gerekiyor”a dönüşüyor
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
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
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
grepyetmez 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
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
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ü
node_modulesiçine açmak yerine sıkıştırılmış arşivlerden doğrudan çalıştırabiliyorhttps://yarnpkg.com/features/pnp
Java'da
.classdosya dizin ağacı yerine.jarkullanmaya epey benziyorYine 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
Gerçekten bilmiyorum
npm'in GitHub'a ait olduğunu bilmiyordum
Bu da birçok şeyi açıklıyor
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.”
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ı
Ve Microsoft, GitHub'ı Azure'a taşıdı
package.jsoniçindeki izin listesinin paket sürümünü de sabitleyip sabitlemediğini, yoksa yalnızca paket adını mı sabitlediğini merak ediyorumallowScriptsvarsayılanının kapalı olması güzel[Saate bakar] pnpm'i takip etmeleri sadece 18 ay mı sürdü?
JavaScript tarafında bunun amacı ne?