Web paketi yükleyicileri ve eklentiler; fark ne?


104

Web paketindeki yükleyiciler ve eklentiler arasındaki fark nedir?

Eklentileri için dokümantasyon sadece diyor ki:

Genellikle web paketindeki paketlerle ilgili işlevsellik eklemek için eklentileri kullanın.

Babel'in jsx / es2015 dönüşümleri için bir yükleyici kullandığını biliyorum, ancak diğer ortak görevler (örneğin, kopya-web paketi-eklentisi) bunun yerine eklentileri kullanıyor gibi görünüyor.


2
Yükleyici, dosyaları tanınabilir js'ye dönüştürür (ve dönüştürme sırasında bir şeyler yapar), eklentiler yükleyici çıktılarında ihtiyaç duydukları her şeyi yapabilir.
David Guan

Yanıtlar:


62

Yükleyiciler require("my-loader!./my-awesome-module"), kodunuzda olduğu gibi sth kullandığınızda hemen hemen her dosya biçiminin ön işleme dönüşümünü yapar . Eklentilerle karşılaştırıldığında, (a) web paketine yalnızca tek bir işlevi gösterdiklerinden ve (b) gerçek oluşturma sürecini etkileyemediklerinden oldukça basittirler.

Öte yandan eklentiler, web paketleri derleme sistemi içindeki kancaları kaydedebildikleri ve derleyiciye ve nasıl çalıştığının yanı sıra derlemeye erişebildikleri (ve değiştirebildikleri) için web paketine derinlemesine entegre olabilirler. Bu nedenle, daha güçlüdürler, ancak bakımı da daha zordur.


yükleyici neden webpack ile derinlemesine entegre olamıyor?
Nitin.

@NitinTyagi Çünkü eklentilerin işi budur. Yükleyicilerin amacı basit olmaktır.
helt

157

Tamamlayıcı ve daha basit bir cevap eklemek.

Yükleyiciler:

Yükleyici tek dosya düzeyinde çalışmak sırasında veya öncesinde paket oluşturulur.

Eklentiler:

Eklentiler, paket veya yığın düzeyinde çalışır ve genellikle paket oluşturma sürecinin sonunda çalışır . Eklentiler, paketlerin nasıl oluşturulacağını da değiştirebilir. Eklentiler, yükleyicilerden daha güçlü kontrole sahiptir.

Sadece bir örnek için, yükleyicilerin nerede çalıştığını ve eklentilerin nerede çalıştığını aşağıdaki resimde açıkça görebilirsiniz -

görüntü açıklamasını buraya girin Referanslar: Makale ve Görsel


36
Aferin! İki basit cümle ve şimdi farkı anlıyorum. Lütfen şimdi TÜM web paketi dokümanları kitaplığını yeniden yazmaya devam edin, çünkü tamamen anlaşılmaz bir anlam ifade etmiyor.
rism

18

Özünde, web paketi sadece bir dosya paketleyicidir. Çok basit bir senaryo düşünüldüğünde (kod bölme yok), bu yalnızca aşağıdaki eylemler anlamına gelebilir (yüksek düzeyde):

  1. giriş dosyasını bulun ve içeriğini hafızaya yükleyin
  2. içerikteki belirli bir metni eşleştirin ve bunları değerlendirin (örneğin, @import)
  3. Önceki değerlendirmeye dayalı bağımlılıkları bulun ve onlarla aynısını yapın
  4. hepsini bellekte bir demet halinde birleştirin
  5. sonuçları dosya sistemine yaz

Yukarıdaki adımları yakından incelediğinizde, bu bir Java derleyicisinin (veya herhangi bir derleyicinin) yaptığı şeyle rezonansa girer. Elbette farklılıklar var ama bunların yükleyicileri ve eklentileri anlamak önemli değil.


Yükleyiciler:

burada çünkü webpack herhangi bir dosya türünü bir araya getirmeyi vaat ediyor.

Webpack'in özünde yalnızca js dosyalarını paketlemeye yetecek kadar yetenekli olduğundan, bu vaat, webpack çekirdek ekibinin, harici kodun belirli bir dosya türünü web paketinin kullanabileceği şekilde dönüştürmesine izin veren derleme akışlarını dahil etmesi gerektiği anlamına geliyordu.

Bu harici koda yükleyiciler denir ve genellikle yukarıdaki 1. ve 3. adımlarda çalışırlar. Bu nedenle, bu yükleyicilerin çalışması gereken aşama açık olduğundan, kancalara ihtiyaç duymazlar ve yapım sürecini de etkilemezler (çünkü derleme veya paket yalnızca 4. adımda gerçekleşir).

Böylece, Yükleyiciler derleme aşamasını hazırlar ve web paketi derleyicisinin esnekliğini bir nevi genişletirler.


Eklentiler:

buradalar çünkü webpack değişken çıktıları doğrudan vaat etmese de, dünya bunu istiyor ve webpack buna izin veriyor.

Webpack'in özü yalnızca bir paketleyici olduğundan ve bunu yaparken birkaç adım ve alt adımdan geçtiğinden, bu adımlar ek işlevsellik oluşturmak için kullanılabilir.

Örneğin, web paketi derleyicisinin yerel bir yeteneği olan üretim oluşturma süreci (küçültme ve dosya sistemine yazma), çekirdek kapasitesinin bir uzantısı olarak değerlendirilebilir (bu sadece bir araya getirme) ve yerel bir eklenti gibi değerlendirilebilir. Sağlamamış olsalardı, başkası yapardı.

Yukarıdaki yerel eklentiye bakıldığında, web paketi paketlemesi veya derlemesi, temel paket oluşturma sürecine ve ayrıca kapatabileceğimiz veya özelleştirebileceğimiz veya genişletebileceğimiz birçok yerel eklenti işlemine bölünebilir gibi görünüyor. Bu, harici kodun, seçebilecekleri belirli noktalarda (kancalar olarak adlandırılır) paketleme sürecine katılmasına izin vermek anlamına geliyordu.

Bu nedenle eklentiler çıktıyı etkiler ve web paketi derleyicisinin kapasitesini genişletme biçimini etkiler.


1
Harika cevap, gerçekten canlı bir resim çiziyor
Robotron

Bu cevabı gerçekten beğendim. Akıl yürütebilmeniz için size bazı açıklamalar verir. Sadece tanım değil, arkasındaki içgörü.
Dazag

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.