JavaScript Çalışma Zamanı Deno 2.0: Yeni Sürüm En İyi Node.js mi?!
Dört yılı aşkın bir süredir şirketimin YouTube kanalında neredeyse her hafta yeni bir video yayınlıyoruz ve zamanla şu veya bu teknoloji hakkında bir veya iki fikrimi dile getirdim. Bunu öyle hafife almıyorum, bunun yerine gelecekte hangi teknolojilerin işe yarayıp hangilerinin işe yaramayabileceğini, pazarın neye tepki vereceğini ve neye vermeyeceğini vb. önceden dikkatlice düşünüyorum. Kendimi övmek istemem ama gelecekteki trendleri ve gelişmeleri erkenden fark etme ve buna göre tahmin etme konusunda makul bir yeteneğe sahip olduğumu söyleyebilirim. Ancak elbette bazen yanılıyorum.
Duyuru
Golo Roden, native web GmbH'nin kurucusu ve CTO'sudur. Etkinlik ve hizmet odaklı dağıtılmış mimarilere odaklanarak web ve bulut uygulamaları ile API'lerin tasarımı ve geliştirilmesiyle ilgilenmektedir. Yol gösterici ilkesi, yazılım geliştirmenin kendi başına bir amaç olmadığı, her zaman temeldeki profesyonelliği takip etmesi gerektiğidir.
Bir yandan, tüm dikkatime rağmen, örneğin önemli bir yönü görmediğim için değerlendirmede hata yaparsam bu gerçekleşebilir. Ancak bu, bazı teknolojilerin zamanla çok fazla değişmesi nedeniyle de olabilir, aslında bir süre sonra onları yeniden değerlendirmem ve muhtemelen önceki fikrimi revize etmem gerekiyor. Bugün de durum tam olarak böyle: Bugün Deno'nun yeni çıkan 2. versiyonundan bahsetmemiz gerekiyor.
Çok eğlence, az içerik
Bir süredir videolarımızı takip edenler biliyor ki Deno'nun ilk videoları neredeyse tam dört yıl öncesine dayanıyor. Başlangıç noktası Ryan Dahl'ın JSConf EU 2018'deki “Node.js Hakkında Pişman Olduğum On Şey” başlıklı konuşmasıydı. Daha sonra bu argümanın ilk değerlendirmesini yaptım: Diğerlerinin aksine, onun argümanından çıkaracak pek bir şey bulamadım. Bugüne kadar hiçbir şey değişmedi: Doğruyu söylemek gerekirse, sunumunun içerik açısından zayıf olduğunu ve ileri sürülen argümanların da zayıf olduğunu gördüm.
Önerilen editoryal içerik
İzniniz doğrultusunda harici bir YouTube videosu (Google Ireland Limited) buraya yüklenecektir.
Her zaman YouTube videolarını yükle
YouTube videosunu şimdi indirin
Deno 2.0: En iyi Node.js mi?!
O zamanlar Deno'nun duyurusu bana son derece abartılı görünmüştü. Evet, V8 sanal alanının tutarlı kullanımı gibi bir veya iki ilginç yön vardı, ancak o zamanlar zaten güncelliğini kaybetmiş, alakasız veya dikkate alınmamış yeterince nokta vardı. Ryan Dahl'ın davranış şeklini sık sık eleştirdim: Eğer gerçekten dünyayı JavaScript geliştiricileri için daha iyi bir yer haline getirmekle ilgileniyorsa, (benim görüşüme göre) pazardaki JavaScript ekosistemini parçalamak yerine Node.js'ye yeniden bağlanmalı. ayrıca sunucular.
Ayrıca tüm sahte pişmanlıklar, perde arkasında bir şirket kurmak için bir bahane gibi geldi; bu elbette tamamen meşruydu, ancak benim beğenime göre yeterince şeffaf bir şekilde iletilmedi. Genel olarak, konferans benim için çok acıklıydı, çok fazla drama, çok fazla gösteri ve çok az gerçek tartışma vardı. Kısacası: O zamanlar Deno'nun çoğunlukla sıcak hava olduğunu sanıyordum.
Hızla orada, hızla tekrar gitti
Peki ne diyebilirim? Altı yıl önce duyurulduğundan beri Deno bir fiyaskoydu. Evet, Node.js'nin daha da gelişmesinde kesinlikle bir miktar etkisi oldu, ancak muhtemelen yönetilebilirdi. Ancak bunun karşılığında Deno, sunucuda JavaScript parçalanmasını başlattı ve bu durum, Bun ile birlikte daha da kötüleşti. Bun Hakkında: Çok küçük ve yönetilebilir bir topluluk dışında hiçbir şeye benzemiyor ve burada bile benim için çok fazla şov var ve yeterince sunum yok. Şu ana kadar Deno benim için çok fazla gösteri, çok fazla konuşma, çok az içerik ve her şeyden önce tek bir şey olarak kaldı: işe yaramaz.
İlginç olan, Ryan Dahl'ın o zamanlar duyurduğu şeylerin çoğunun, sonuçta pek de akıllıca bir fikir olmadığı ortaya çıktı; tıpkı onun sözde aman tanrım “kötülük”e yönelik büyük eleştirisi gibi. paket.json– Node.js'de bağımlılıkların yönetildiği dosya. NPM'nin dezavantajları, neden bunların temel bir tasarım hatası olduğu vb. hakkında söylenmeyenler. Artık her şeyi daha iyi yapmalıyız (ve “daha iyi” farklı bir anlam taşıyordu). Anlaşılan o ki: npm kesinlikle mükemmel değil ama Ryan Dahl'ın o zamanlar tanımladığından çok daha iyi. Deno'nun o zamandan beri bağımlılıkları farklı şekilde ele almak için denediği tüm yaklaşımlar tek bir şeyle sonuçlandı: uyumsuzluk ve ironik bir şekilde yeni sorunlar.
Bir noktada Deno'nun arkasındaki ekip, mevcut JavaScript ekosistemini tamamen göz ardı etmenin ve hariç tutmanın iyi bir fikir olmadığını fark ettiğinden, Deno bir U dönüşü yaptı ve npm için geçici desteği entegre etti. Ve birdenbire Deno artık tamamen yalıtılmış bir çözüm olmaktan çıktı, ama en azından üzerinde biraz çalışılabilirdi. Ancak pek çok şey işe yaramadı. Bu nedenle, npm ve diğer şeylerin yanı sıra Node.js ile uyumluluk yavaş yavaş genişletildi; çünkü pratik olarak tüm temel API'lerin eksik olması, farklı adlara sahip olması veya farklı şekilde çalışması durumunda geçişin çekici olmadığı fark edildi.
Deno 2 her şeyi yeni kılıyor
Yani Deno yavaş yavaş sözde ideallerinin çoğundan uzaklaştı ve şimdi çok kötü ve kusurlu görülen her şeyin %90'ını desteklemeye çalışıyor. Bu, Ekim başında Deno 2.0'ın piyasaya sürülmesiyle doruğa ulaştı.
Bu, fikrimi yeniden gözden geçirmem için yeterli bir nedendi. Ve bazı şeyleri gözden geçirmem gerektiğini söylemem gerekiyor: Deno 2, Deno'nun ilk sürümüdür. Tamamen ilginç çünkü nihayet sadece akademik bir alıştırmadan fazlasını temsil ediyor ve onu Node.js'nin olası bir alternatifi olarak konumlandırabilecek birçok ilginç fikir sunuyor. Gerçekte şu an iyi çünkü Node.js ile ilgili sorunlar birikiyor: daha da gelişiyor, ancak çok fazla açık iş var ve giderek daha kaotik hale geliyor. Bu yüzden yaklaşık altı ay önceki videolarımızdan birinin başlığı şuydu: “22. Düğüm, hadi arkadaş olalım.” Basitçe söylemek gerekirse: Artık seninle bir ilişki içinde olmak istemiyorum, ayrılıyorum!
İşte tam bu noktada Deno 2 devreye giriyor. Deno 2'yi özel kılan şey, arkasındaki ekibin Node.js ve npm ile uyumsuzluğun üstesinden gelmek için çok çaba sarf etmesidir. Deno 2'den başlayarak, artık Deno'yu gerçek bir yedek parça olarak kullanabilirsiniz. Söz şu: Node.js'de çalışan her şey Deno'da da çalışır. Bu, küçük ve büyük uygulamalar için geçerlidir ve Next.js, Astro, Remix, Angular, SvelteKit ve diğerleri gibi birçok çerçeveyi içerir; her şey kutudan çıktığı gibi çalışır. Ancak Deno, yalnızca Node.js'nin 1:1 kopyası olmakla kalmadı, aynı zamanda bir bakıma artık “en iyi Node” haline geldi.
Deno ve Node.js
Çünkü Deno, Node.js'nin yalnızca hayal edebileceği bir dizi özelliği getirdiğinden (ve yalnızca sürüm 2'den değil): yerel TypeScript desteği (bu, artık Node.js'de mevcuttur, ancak hala çok temel düzeydedir), yerleşik bir biçimlendirici, yerleşik bir linter , bir tür denetleyici, bir test çerçevesi, bir derleyici, İnternet'teki tüm kodların sorulmadan tam güvenle çalışmadığı mantıklı bir güvenlik konsepti vb. Node.js 15 yıldır tüm bunları kaçırıyor. Ve Deno'da her şey çok hızlı ve düşünceli bir şekilde uygulanıyor.
Bir örnek: Deno'da TypeScript kodunun manuel olarak derlenmesi gerekmez; Deno, uygulama başlatıldığı anda bunu otomatik olarak yapar. Ancak performans nedenleriyle, parametreyle açıkça belirtilmediği sürece TypeScript türü denetimi atlanır. –kontrol etmek gerekli. Ancak testleri çalıştırırken tür denetimi varsayılan olarak açıktır. Bu mantıklıdır: Geliştirme sırasında, performansın son kısmı önemli olmadığında, istediğiniz türde güvenliğe sahip olursunuz, uygulama sırasında ise mümkün olan en iyi performansı elde edersiniz. Ve harika olan şey, test çerçevesinin zaten Deno'ya dahil edilmiş olması, dolayısıyla ek bir şey yüklemenize gerek yok.
Node.js artık bunun bazı yönlerini de sunuyor ancak uzun zaman aldı ve kapsam veya entegrasyon açısından Deno'nun yanına yaklaşamıyor. Ve Deno burada bitmiyor: Örneğin test çerçevesi Node'dan çok daha ileri gidiyor çünkü Deno aynı zamanda doğrudan kod kapsamını hesaplayabilir, kıyaslamaları çalıştırabilir ve daha fazlasını yapabilir.
Sadelik ön planda
Testleri çalıştırmaya, kod kapsamını belirlemeye ve kıyaslamaları çalıştırmaya yönelik tüm bu işlevler, yerel olarak Deno ikili dosyasına dahil edilmiştir. Yani tüm bunları kullanmak için tek bir araca ihtiyacınız var. Ayrıca, yalnızca JavaScript ve TypeScript'i değil aynı zamanda HTML, CSS ve YAML'yi de biçimlendiren bir biçimlendirici de entegre edilmiştir. Ayrıca eksiksiz bir linter, görevleri yürütmek için yerleşik bir çözüm, bir belge oluşturucu ve gerçek ikili dosyalar oluşturmak için bir derleyici de dahildir. İkincisi teorik olarak Node.js ile mümkündür, ancak çözüm o kadar karmaşıktır ki bu işlevselliği kullanmak kesinlikle hiç eğlenceli değildir.
Deno aynı zamanda bir web sunucusu, Jupyter dizüstü bilgisayarlar için destek ve çok daha fazlasını tek tip ve koordineli bir biçimde içerir; Node ile ise her şeyi zahmetli bir şekilde bulmanız ve elle yapılandırmanız gerekir. Ve sonuçta Deno 2'yi diğerlerinden ayıran şey de bu: basitlik ve “sadece işe yarıyor.”
Örneğin npm modüllerini kullanan bir uygulamanız varsa artık Deno ile “npm install” çalıştırmanıza gerek kalmayacak. Deno, uygulamayı ilk başlattığınızda gerekli modülleri otomatik olarak indirir ve bunları yerel önbellekte saklar. Arka planda o kadar iyi ve kusursuz bir şekilde çalışıyor ki, yarım saatlik bir geliştirme sürecinin ardından “npm install” çalıştırmanız ve bir node_modules dizinini veya blok dosyasını yönetmeniz gerektiğini unutacaksınız. Ve bunların hepsi inanılmaz derecede hızlı gerçekleşiyor: Şu ana kadar Node.js kullandığımı gördüğüm her paket yöneticisi karşılaştırılabilir. Bu sorun gerçekten iyi çözüldü ve Deno 2'nin bıraktığı izlenim şu: Node.js'ye benziyor ama yeniden düşünülmüş.
Deno, Node'a benziyor, yalnızca yeniden tasarlandı
Belki Deno 1 son altı yıldır sadece bir konseptin kanıtıydı: pek hoş olmayan ama yolculuğun gerçekte nereye gitmesi gerektiğini bulmak için gerekli bir prototip ve Deno 2 artık gerçek ilk versiyon.
Ve açıkçası saygımı ifade etmem gerekiyor çünkü Deno 2 oldukça başarılı bir ikinci versiyon. Birdenbire TypeScript ile yeniden geliştirme yapmak eğlenceli hale geldi çünkü yüzlerce farklı şeyi kurup yapılandırmanıza gerek yok, sadece bir düzenleyici açıp birkaç satır yazıp bunları çalıştırıyorsunuz. Ve formatlandı. Ve testler. Ve benzeri. Üstelik tüm bunlar hiçbir şey yüklemenize bile gerek kalmadan.
Node.js'nin şu anki durumuyla karşılaştırıldığında bu, ileriye doğru atılmış büyük bir adımdır. Nihayet yeniden modern ve çağdaş hissettiriyor. Bu bağlamda şunu söylemem gerekiyor: Doğru çalışma zamanı ortamı oluştuğunda TypeScript birdenbire yeniden çok eğlenceli hale geliyor. Teşekkürler Deno2!
(Ben)