Bağımlılık Yönetimi ve WordPress: Teklif
Müşteriler, eklenti V2 kullanıyorsa, AWS SDK’ya dayanan ve paket AWS SDK’ya güvenen diğer eklentilerle birlikte kullandıklarında, uyumlu olmayan kütüphane sorunları yaşarız. WordPress, aktivasyon sırasına göre eklentiler içerir ve PHP, (otomatik yükleyiciler kullanırken) çağrıldığında gerektiğinde dosyalar ve sınıf içerir, bu nedenle bu, eklentilerin önce SDK kodunu çağırdığı gerçek bir piyangodur. Başka bir eklenti acı çekiyor. Bu sorun hakkında en sinir bozucu olan şey, iyi niyetlerden kaynaklanmasıdır! Geliştirici, verimli olmak ve tekerlekleri yeniden oluşturmaktan kaçınmak için üçüncü taraf kodunu kullanır. Kod başkaları tarafından yazılmış ve birçok kişi tarafından kullanılmış ve test edilmiştir.
Neden eklentinize bir ad alanı veya sınıfla bir kütüphane eklemiyorsunuz? İşe yarayacak, hiçbir çatışma olmayacak. İbericode insanlar bunu eklentilerine sivilce paketine girmek için yaparlar. Bu onlar için iyi çalışır çünkü sivilce iki küçük dosyadan oluşan bir pakettir. Ama bu ölçek değil. AWS SDK gibi büyük bir şey için bunu manuel olarak yapmak çok fazla iş olacaktır ve paket her güncellendiğinde tekrar tekrar yapması gerekecektir. Bu yüzden insanlar genel olarak bestecilere yönelir, çünkü üçüncü taraf kütüphanelerini kod tabanına yönetmeyi ve entegre etmeyi kolaylaştırır. Ancak maalesef besteci genellikle bu sorunun suçlusu olarak görülüyor. Bu bir besteci sorunu değil! WordPress topluluğu, yanlış fırça tarafından çizilmeden bir besteciye (diğer PHP dünyasının aksine) katılmaya çalışmak için oldukça zor zamana sahip! Sorun zaten orada, besteci olmadan, çok çarpıcı görmüyorsunuz. Bir besteci kullansanız da kullanmasanız da, üçüncü bir bölüm kütüphanesini genel eklentinizle sarın, WordPress ile ilgili sorunlara neden olur. Alain Schlesser – Post gevşek durumu. Peter Suhm, bu sorun nedeniyle bestecileri WordPress ile kullanmanın tehlikeleri hakkında yazdı, ancak neyse ki Coen Jacobs hatalarını göstermek için bir besteci savunmasına atladı. Bu, Peter ve Coen arasında, bir besteci kullanarak ironik bir şekilde Coen’in potansiyel çözümlerinin teşvik edilmesine yardımcı olan birkaç tartışmayı tetikledi. Wikimedia için yapılan besteci kombinasyon eklentisini, çalışma zamanı sırasında birkaç besteci.json dosyalarını birleştirmek için kullanır.
Bu çok makul, çünkü besteci fiili bir PHP paketi ve bir bağımlılık yöneticisidir, ancak bağımlılıklarını yönetmek için kendi bestecilerini kullanarak birkaç eklentiye sahip olabilecek WordPress sitelerinde çalışmasını sağlamak için biraz bükülmeye ihtiyaç duyar. Bu sadece Coen kavramının kanıtıdır ama burada yönü seviyorum ve sorunu daha sonra besteciyle çözmek için geri döneceğim. Ryan McCue’nin ideal yaklaşımı, teknik uygulamaya çok odaklanmayan WordPress’e eklenti bağımlılığı sorununu nasıl çözeceği hakkında iyi bir makale yazıyor, bunun yerine son kullanıcının deneyiminden neye ihtiyaç duyuluyor. Özetlemek gerekirse, çözüm gereklidir: eklenti yüklenmeden önce önündeki bağımlılıklarla çatışma potansiyelini yakalayın
Kurulum, eklenti bağımlılıklarının kurulumunu otomatik olarak ele almalıdır
Eklentideki güncelleme bağımlılığın farkında olmalı ve güncellemenin çatışmaya neden olup olmayacağı konusunda durmalı ve uyarmalı
Bir proje olarak WordPress, geliştiricilere değil, kullanıcılara çok odaklanmıştır. ‘Karar bir seçenek değildir’ son yıllarda birçok proje özelliğine öncülük eden bir büyüdür, otomatik bir arka plan güncellemesi önemli olanlardan biri haline gelmiştir. Bağımlılık yönetimi, kullanıcıların çok fazla düşünmeleri gerekmediği ve sadece onlar için işe yaradığı aynı şekilde ele alınmalıdır.
Bu tür bir çözüm, birçok şey ve bazı büyük zorluklarla karşılaşan büyük bir sorudur. Kritik olarak, Ryan çözümün nereye yerleştirilmesi gerektiğini açıkladı – Çekirdek WordPress: Buradaki son hedef temel entegrasyon. Çözüm sonunda çekirdeğe bitmezse, proje başarısız oldu, çünkü her yerde değil. Bu olursa, ihtiyacınız olanı kaldırın ve tekrar deneyin, ancak birçok kullanıcı için ana çözüm olmalıdır. Bir takdir, en büyük WordPress geliştiricisi değilim. Bir besteci kullanabilirim ama uzman değilim. Tabii ki dahili bir PHP insanı değilim ve sadece yazarken bu sorunu takip etmek istiyorum, ama … Bence sorun çözülebilir ve bu benim çözümler ve temel özellik eklentileri olasılığı için üst düzey teklifim. Daha önce de belirttiğim gibi, Coen’i besteci tabanlı bir çözümle gerçekten doğru yolda hissediyorum ve bazıları doğrudan projeden ilham alıyor, ancak bence daha ileri gitmemiz gerekiyor.
1. Bir eklenti bestecisi veya üçüncü taraf kodu kullanan herhangi bir tema aracılığıyla üçüncü taraf kodu, composer.json dosyalarını kullanarak bağımlılığı belirlemek gerekir ve satıcı dizini dağıtmayabilir. 2. Çekirdek WordPress’teki besteciler, nihai kullanıcının ihtiyaçlarını manuel olarak yüklemek için ortadan kaldıran bir besteci ile birlikte toplanmalıdır. Bu, WordPress’in ihtiyaç duyduğu diğer kütüphaneler gibi, talep veya basit pasta gibi olacaktır.
3. Özel besteci davranışımızın, WordPress ile entegre edilecek besteci çekirdek davranışını ayarlaması gerekir. Özellikle, bu, composer.json eklenti dosyasını okumak için eklenti/tema yükleme işlemi ile entegre olur, diğerlerine birleştirir ve bağımlılıkları yükler. Çatışmayı yakalamak ve sorunu anlatmak için kullanıcıya (yönetici veya CLI UI aracılığıyla) cevap vermek gerekir. Ayrıca bir eklenti güncellenirken bunu ele alması gerekir. Drupal, 2013’ten beri benzer bir besteci yöneticisine sahipti: Composer Manager, katkıda bulunan her modülün, modülün özel gereksinimlerini içeren composer.json dosyasıyla gönderilmesine izin verir. Ardından, Composer.json dosyasında bulunan tüm modüllerin gereksinimlerini birleştirin. Bu, kod çoğaltma ve uyumsuzluk sürümünü önleyen tüm modüllerde paylaşılan bir satıcı/ dizinle sonuçlanır. Sandboxing Paketi Teklifimin son kısmı Mavi Gökyüzü hakkında biraz daha düşünmek, ancak Coen’in son eserlerinden bazıları bana umut verdi. WordPress ve kullanıcılar için ideal senaryo, çatışmayla hiç uğraşmak zorunda değildir. Her eklenti, başkalarını rahatsız etme tehdidi olmadan bağımlılığını güvenli bir şekilde yerine getirebilmelidir. Aynı sınıfın birkaç sürümünü içeren PHP’de yapılması imkansızdır, ancak ayrı olarak kullanılabilmesi için adın veya sınıfın bir önekini vermek, başarılı olabilecek bir şeydir ve daha önce besteci perspektifinden tartışılmıştır.
Mozart, Coen’den PSR-0 ve PSR-4 ile özel ad alanlı otomatik olarak uyumlu bir paket başlatan yeni bir komut dosyasıdır, böylece bir eklenti tarafından güvenli bir şekilde kullanılabilir. Bu tür bir işlevselliği WordPress besteci bölümüne oluşturmak, eklentiler tarafından kullanılan tüm bağımlılıkların kum kutusunda olacağı ve görünen bir çatışma olmayacağı anlamına gelir. Tabii ki, Mozart için sınıf haritaları olan veya isim alanı olmayanlar gibi diğer paket türlerini desteklemek için daha fazla çalışma yapılması gerekiyor ve bu yaklaşım, talimatları ve bağımlılık enjeksiyonunu kullanan daha karmaşık paketlerle savaşacak, ancak mevcut olanlar potansiyel. Bu teklifle ilgili bazı net sorunlar vardır, bir numara, bestecinin minimum PHP gereksinimi 5.3 olmasıdır. Bu teklif bu yazıdaki sözlerimden daha ileri gittiğinde, WordPress’teki PHP 5.2 desteğinin geçmişten bir şey olduğu konusunda iyimserim. Ve eğer değilse ve bu proje bir cazibe alır, umarım bu, minimum sürüme çarpan argümanlar için ek bir ağırlık olarak işlev görür. Bir sonraki en büyük sorun benimsenmesidir. Bu, insanların şimdiye kadar Wild West kodlama uygulaması haline gelen eklentiler yazma biçiminde büyük bir değişiklik olacak. Dahil edilen herhangi bir üçüncü taraf kodu bir besteci aracılığıyla yapılmalıdır. WordPress.org Eklenti İnceleme Ekibi hazır olmalı ve mevcut eklentiden bazı otomatik incelemeler bir seçenek olacaktır. Ayrıca, WP-Chli artık bir WordPress.org projesi olduğundan, besteci dosyaları içerecek şekilde eklenti iskelesine daha net standartlar eklemek mantıklıdır.
JSON. Paket sanal alanda değilse ve çatışma hala bir sorunsa, bunun gibi bir besteci kullanmak sürümü yapma konusunda sorunlara neden olur. Birçok paketin çok sıkı sedver gereksinimleri vardır. Değişiklik yapabilir veya ödev gönderebilirseniz bu büyük bir sorun değildir. Gereksinimler çok sıkı olduğu için eklentileri yükleyemeyen son kullanıcılar için çok sorunlu olacaktır. WordPress, burada karar vermesiyle akıllı olmalı ve sınırları makul sınırlar içinde geçersiz kılar, böylece son kullanıcının deneyimi bozulmaz. Performans başka bir endişe. Genellikle WordPress çalıştıran sunucular genellikle çok fazla bellek harcaması gerekmeyen web isteklerine hizmet etmek için optimize edilir. Besteci bağımlılığının çözünürlüğü, bazen çözülmesi gereken 100k+ kurallardan daha fazla ağaç haline getiren yoğun bellek sürecidir. Bu, güvenilir bir şekilde yürümek için kolayca 256MB hatta 512MB bellek gerektirebilir. Neyse ki bu onarılıyor, ancak çok fazla bağımlılık gerektiren eklentilerle WordPress kurulumu, kurulum süresini kesinlikle artıracak ve sadece zip dosyalarını indirmek ve çıkarmaktan daha fazla sunucu kaynağı harcayacaktır. Son olarak, benim için sorun uygulama. Ne yapılması gerektiğini görebiliyorum ama tam olarak nasıl yapılacağını göremiyorum. Bu tür bir proje bunu yapmasını gerektiriyor ve onu bir özellik projesine dönüştürmeye nereden başlayacağımı bilmiyorum.