Güncelleme 5/24/2018: Artık orijinal yayınımdan Angular'ın +3 sürümüyüz ve hala son bir uygulanabilir çözümümüz yok. Lars Meijdam (@LarsMeijdam) kesinlikle görülmeye değer ilginç bir yaklaşım ortaya koydu. (Tescilli sorunlar nedeniyle, GitHub deposunu örneğini ilk olarak gönderdiği geçici olarak kaldırması gerekiyordu. Ancak, bir kopyasını istiyorsanız doğrudan ona mesaj gönderebilirsiniz. Daha fazla bilgi için lütfen aşağıdaki yorumlara bakın.)
Açısal 6'daki son mimari değişiklikler bizi bir çözüme yaklaştırıyor. Ek olarak, Açısal Öğeler ( https://angular.io/guide/elements ) bazı bileşen işlevleri sağlar - ancak bu yazıda başlangıçta tarif ettiğim gibi değil.
İnanılmaz Angular ekibinden herhangi biri bununla karşılaşırsa, lütfen bu işleve çok ilgi duyan başka birçok insan var gibi görünüyor. Birikmiş işler için düşünmeye değer olabilir.
Bir de takılabilir (plug-in) bir çerçeve uygulamak istiyoruz Angular 2
, Angular 4
, Angular 5
ya da Angular 6
uygulama.
(Bu takılabilir çerçeveyi geliştirmek için benim özel kullanım durumum, minyatür bir içerik yönetim sistemi geliştirmem gerektiğidir. Burada ayrıntılı olarak açıklanmamış birkaç nedenden ötürü Angular 2/4/5/6
, bu sistemin çoğu gereksinimi için neredeyse mükemmel bir seçimdir.)
Takılabilir çerçeve (veya eklenti mimarisi) ile, özellikle üçüncü taraf geliştiricilerin , birincil uygulamanın kaynak koduna doğrudan erişmeden veya bilgi sahibi olmadan takılabilir bileşenler kullanarak birincil uygulamanın işlevselliğini oluşturmasına veya genişletmesine izin veren bir sistemi kastediyorum. veya iç işler .
(" Uygulamanın kaynak koduna veya iç çalışmalarına doğrudan erişmeden veya bilgi sahibi olmadan " ifadesi temel bir hedeftir.)
Takılabilir çerçevelere örnek olarak WordPress
veya gibi yaygın içerik yönetim sistemleri verilebilir Drupal
.
İdeal durum (Drupal'da olduğu gibi), bu takılabilir bileşenleri (veya eklentileri) bir klasöre yerleştirmek, uygulamanın otomatik olarak algılanmasını veya keşfetmesini ve sihirli bir şekilde "çalışmasını" sağlamaktır. Bunun bir tür çalışırken takılabilir şekilde gerçekleşmesi, yani uygulama çalışırken optimum olacaktır.
Şu anda aşağıdaki beş sorunun yanıtlarını ( sizin yardımınızla ) belirlemeye çalışıyorum .
- Pratiklik: Bir
Angular 2/4/5/6
uygulama için eklenti çerçevesi pratik mi? (Şimdiye kadar, gerçekten takılabilir bir çerçeve oluşturmak için pratik bir yol bulamadımAngular2/4/5/6
.) - Beklenen Zorluklar: Bir uygulama için eklenti çerçevesinin uygulanmasında hangi zorluklarla karşılaşılabilir
Angular 2/4/5/6
? - Uygulama Stratejileri: Bir
Angular 2/4/5/6
uygulama için bir eklenti çerçevesi uygulamak için hangi spesifik teknikler veya stratejiler kullanılabilir ? - En İyi Uygulamalar: Bir uygulama için bir eklenti sistemi uygulamak için en iyi
Angular 2/4/5/6
uygulamalar nelerdir? - Alternatif Teknolojiler: Eğer bir eklenti çerçevesidir değil bir pratik
Angular 2/4/5/6
uygulamada ne nispeten eşdeğer teknolojileri (örnReact
) bir uygun olabilecek çağdaş yüksek reaktif Web uygulaması ?
Genel olarak, kullanımı Angular 2/4/5/6
çok arzu edilir çünkü:
- doğal olarak son derece hızlı - çok şaşırtıcı.
- çok az bant genişliği tüketir (ilk yükten sonra)
- nispeten az yer kaplar (sonra
AOT
ve sonratree shaking
) - ve bu ayak izi küçülmeye devam eder - son derece işlevseldir ve Açısal ekip ve topluluk ekosisteminde hızlı büyümeye devam etmektedir
- gibi en iyi ve en yeni Web teknolojilerinin birçoğuyla iyi oynar
TypeScript
veObservables
- Açısal 5 artık servis çalışanlarını destekliyor ( https://medium.com/@webmaxru/a-new-angular-service-worker-creating-automatic-progressive-web-apps-part-1-theory-37d7d7647cc7 )
- tarafından desteklenerek
Google
, gelecekte desteklenecek ve geliştirilecektir.
Angular 2/4/5/6
Mevcut projem için çok kullanmak istiyorum. Kullanabiliyorsam Angular 2/4/5/6
, Angular-CLI
ve muhtemelen de Angular Universal
(sunucu tarafı oluşturma için) kullanacağım .
İşte yukarıdaki sorularla ilgili düşüncelerim. Lütfen görüşlerinizi ve aydınlanmanızı gözden geçirin ve sağlayın.
Angular 2/4/5/6
uygulamalar paketleri tüketir - ancak bu, bir uygulama içinde eklentilere izin vermekle aynı şey değildir. Diğer sistemlerde (örn.Drupal
) Bir eklenti , eklenti klasörünü sistem tarafından otomatik olarak "alındığı" ortak bir modüller dizinine bırakarak eklenebilir. İçindeAngular 2/4/5/6
, bir paket (eklenti olarak olabilir) genellikle üzerinden yüklenirnpm
, eklenirpackage.json
ve sonra uygulamaya olduğu gibi manuel olarak içe aktarılırapp.module
. Bu,Drupal
bir klasörü bırakma ve sistemin paketi otomatik olarak algılamasını sağlama yönteminden çok daha karmaşıktır . Bir eklenti kurmak ne kadar karmaşıksa, insanların bunları kullanma olasılığı o kadar az olur. Bir yol olsaydı çok daha iyi olurduAngular 2/4/5/6
eklentileri otomatik olarak algılamak ve yüklemek için. GeliştiricilerinAngular 2/4/5/6
uygulamayı yüklemesine ve uygulamanın tüm mimarisini anlamadan seçilen herhangi bir eklentiyi yüklemesine izin veren bir yöntem bulmakla çok ilgileniyorum .Genel olarak, takılabilir bir mimari sağlamanın faydalarından biri, 3. taraf geliştiricilerin sistemin işlevselliğini genişletmesinin çok kolay olmasıdır. Açıkçası, bu geliştiriciler, taktıkları uygulama için kodun tüm karmaşıklıklarına aşina olmayacaklardır. Eklentiler geliştirildikten sonra, daha az teknik kullanıcılar bile uygulamayı ve seçilen eklentileri yükleyebilir. Bununla birlikte,
Angular 2/4/5/6
nispeten karmaşıktır ve çok uzun bir öğrenme eğrisine sahiptir. Ayrıca komplike şeyler için çoğu üretimAngular 2/4/5/6
uygulamaları da kullanmakAngular-CLI
,Angular Universal
veWebPack
. Bir eklenti uygulayan birinin, muhtemelen bunların hepsinin nasıl birbirine uyduğuna dair en azından bazı temel bilgilere sahip olması gerekir.TypeScript
ve makul bir aşinalıkNodeJS
. Bilgi gereklilikleri, hiçbir üçüncü tarafın eklenti geliştirmek istemeyeceği kadar aşırı mı?Çoğu eklenti, bazı istemci tarafı çıktılarının yanı sıra bazı sunucu tarafı bileşenlerine (örneğin, eklentiyle ilgili verileri depolamak / almak için) sahip olacaktır.
Angular 2/4/5
özellikle (ve şiddetle) geliştiricilerin çalışma sırasında kendi şablonlarını enjekte etmelerini önler - bu ciddi bir güvenlik riski oluşturur. Bir eklentinin barındırabileceği birçok çıktı türünü işlemek için (örneğin, bir grafiğin görüntülenmesi), kullanıcıların yanıt akışına enjekte edilen içeriği bir biçimde başka bir biçimde oluşturmasına izin verilmesi muhtemelen gerekli görünmektedir.Angular 2/4/5/6
Güvenlik mekanizmasını mecazi olarak parçalamadan bu ihtiyaca nasıl cevap verilebileceğini merak ediyorum .Çoğu üretim
Angular 2/4/5/6
uygulamasıAhead of Time
(AOT
) derlemesi kullanılarak önceden derlenmiştir . (Muhtemelen hepsi olmalıdır.) Önceden derlenmiş uygulamalara eklentilerin nasıl eklenebileceğinden (veya bunlarla entegre olabileceğinden) emin değilim. En iyi senaryo, eklentileri ana uygulamadan ayrı olarak derlemeyi içerir. Ancak, bunun nasıl yapılacağından emin değilim. Geri dönüş, tüm uygulamayı dahil edilen eklentilerle yeniden derlemek olabilir, ancak bu, seçilen eklentilerle birlikte uygulamayı (kendi sunucusunda) yüklemek isteyen bir yönetici kullanıcı için işleri biraz karmaşık hale getirir.Bir
Angular 2/4/5/6
uygulamada, özellikle önceden derlenmiş bir uygulamada, tek bir hatalı veya çakışan kod parçası tüm uygulamayı kırabilir.Angular 2/4/5/6
uygulamalar her zaman hata ayıklaması en kolay yöntem değildir. Kötü niyetli eklentilerin uygulanması çok hoş olmayan deneyimlerle sonuçlanabilir. Şu anda kötü davranılmış eklentileri incelikle işlemek için bir mekanizmanın farkında değilim.