Web paketi için yükleyici sırası nedir?


87

Bir dosyayla eşleşen birden fazla test içeren bir yükleyici yapılandırmam olduğunda, yalnızca ilk eşleşen yükleyicinin kullanılmasını beklerdim, ancak durum böyle görünmüyor.

Kaynağı okumaya çalıştım ama yüklemeyi uyguladığını düşündüğüm biti bulduğumda bile nasıl davrandığını anlayamıyorum.

Belgeler , bu durumun nasıl davranması gerektiğinden de bahsetmiyor.

Yanıtlar:


110
{
    test: /\.css$/,
    loaders: ['style'],
},
{
    test: /\.css$/,
    loaders: ['css'],
},

ve

{
    test: /\.css$/,
    loaders: ['style', 'css'],
},

eşit görünüyor. Fonksiyon açısından, bu aynıdır style(css(file))(Miguel'e teşekkürler).

İçlerinde sağdan solaloaders değerlendirildiğini unutmayın .


2
Hmm, pek kullanışlı bir davranış değil bence: - / Bu davranış için ön yükleyicileri kullanmayı tercih ederim ...
w00t

20
Yükleyiciler işlev gibi davranır, bu yüzden sağdan sola doğru. Bunu kullandığınızda "style!css", onları işlevler gibi hayal edin: style( css( file ) )... bu durumda cssönce denir.
Miguel Angelo

13
SAĞDAN SOLA doğru değerlendirme yapmak beni bir süre zor durumda bıraktı. @ miguel-angelo style( css( file ) )açıklamanız beni rahatlatıyor.
Evi Şarkı

1
SAĞDAN SOLA, Webpack 3 Sözdizimine baktığımızda büyük olasılıkla ALTTAN ÜST'e anlamına gelir ... çoğu alt: ilk diğer bir deyişle en içteki işlev ...
Frank Nocke

1
Bunun ne zaman eklendiğini bilmiyorum ama sonunda siparişle ilgili belgeler var: webpack.js.org/concepts/loaders/#loader-features Yükleyiciler zincirlenebilir. Zincirdeki her yükleyici, işlenen kaynağa dönüşümler uygular. Bir zincir ters sırada yürütülür. İlk yükleyici sonucunu (uygulanan dönüştürmelerle birlikte kaynak) bir sonrakine aktarır ve böyle devam eder. Son olarak, web paketi JavaScript'in zincirdeki son yükleyici tarafından döndürülmesini bekler.
Eric Majerus

61

Resmi belgeler bunu gerçekten iyi açıklıyor. Maalesef gerekli tüm bilgiler dokümantasyonun farklı bölümlerine yayılmıştır. Bilmen gereken her şeyi özetlememe izin ver.

1.

Doğru sırada olduklarından emin olun (aşağıdan yukarıya).

2.

Bir kaynak dosyasının kaynağını parametre olarak alan ve yeni kaynağı döndüren işlevlerdir.

3.

Yükleyiciler zincirlenebilir. Kaynağa bir boru hattında uygulanırlar. Son yükleyicinin JavaScript döndürmesi beklenir; her bir yükleyici kaynağı rastgele bir biçimde döndürebilir ve bu sonraki yükleyiciye iletilir.

Yani...

Eğer varsa somefile.cssve siz içinden geçiyoruz loaderOne, loaderTwo, loaderThreedüzenli bir zincirleme işlev gibi davranır olduğunu.

{
    test: /\.css$/,
    loaders: ['loaderOne', 'loaderTwo', 'loaderThree']
}

tam olarak aynı anlama geliyor ...

loaderOne(loaderTwo(loaderThree(somefile.css)))

Grunt'tan geliyorsanız || yutkunma dünyası kafa karıştırıcı. Yükleyicilerin sırasını sağdan sola doğru okuyun.


1
Bu module.loaders dizisine sahibim, hangi sırayla çalışıyorlar?
Saras Arya

45
NEDEN ALTTAN YÜKLENİYORLAR!
light24bulbs

Dokümantasyondaki "son yükleyicinin" loaderOneörneğinizde olduğunu belirtmek için yanıtı değiştirmek isteyebilirsiniz
aaaaaa

1
@ light24bulbs, böylece .pushkurallara basit bir şekilde ek yükleyiciler ekleyebilirsiniz ve bunları önceden harcama konusunda endişelenmenize gerek kalmaz.
Sarke

3

Bu cevap bana yardımcı oldu ancak yükleyici sırasını etkileyen başka bir nokta olan yükleyici adını tamamlamak istiyorum ! yaklaşmak.

Diyelim ki url-loaderyapılandırmanızda daha yüksek önceliğe sahip bir tane var ve ikincisi ile bir görüntü yolunu içe aktarmakfile-loader istiyorsunuz . Hiçbir şey yapmamak, dosyayı (kodlanmış bir veri url'si oluşturur) aracılığıyla içe aktarır.url-loader

İçe aktarmanın ön eki, içe aktarmayı file-loader!o yükleyiciye yönlendirir.

import image from 'file-loader!./my-img.png'

3
Evet, bundan kaçınmayı sevsem de, derleme sırasında dosyanın bir bağlantı mı yoksa katıştırılmış mı olacağına karar veremezsiniz. Ayrıca !!diğer yükleyicileri (BTW) atlamak için ile başlayabilirsiniz …
w00t
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.