คำสั่งโหลดสำหรับ Webpack คืออะไร?


87

เมื่อฉันมีการกำหนดค่าตัวโหลดที่มีการทดสอบหลายรายการที่ตรงกับไฟล์ฉันคาดหวังว่าจะใช้เฉพาะตัวโหลดที่ตรงกันตัวแรกเท่านั้น แต่ดูเหมือนจะไม่เป็นเช่นนั้น

ฉันพยายามอ่านแหล่งที่มาแต่เมื่อฉันพบบิตที่ฉันคิดว่าใช้ในการโหลดฉันก็ไม่เข้าใจว่ามันทำงานอย่างไร

เอกสารประกอบไม่ได้กล่าวถึงว่าสถานการณ์นั้นควรมีพฤติกรรมอย่างไร

คำตอบ:


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

และ

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

ดูเหมือนจะเท่ากัน ในแง่ฟังก์ชันนี้เหมือนกับstyle(css(file))(ขอบคุณมิเกล)

หมายเหตุว่าภายในloadersพวกเขาได้รับการประเมินจากขวาไปซ้าย


2
อืมพฤติกรรมที่ไม่ค่อยมีประโยชน์ฉันคิดว่า: - / ฉันอยากจะใช้ preLoaders สำหรับพฤติกรรมนั้น ...
w00t

20
รถตักทำหน้าที่เหมือนฟังก์ชันนั่นคือเหตุผลว่าทำไมจึงเรียงจากขวาไปซ้าย เมื่อคุณใช้สิ่งนี้"style!css"ให้จินตนาการว่าเป็นฟังก์ชัน: style( css( file ) )... ในกรณีcssนี้เรียกว่าก่อน
Miguel Angelo

13
การประเมินจากขวาไปซ้ายทำให้ฉันดิ้นรนอยู่พักหนึ่ง @ miguel-angelo style( css( file ) )คำอธิบายของคุณทำให้ฉันรู้สึกโล่งใจ
Evi Song

1
ขวาไปซ้ายส่วนใหญ่หมายถึง BOTTOM เป็น TOP เมื่อเรากำลังดู Webpack 3 Syntax ... ด้านล่างสุด: ฟังก์ชันแรกหรือฟังก์ชันด้านในสุด ...
Frank Nocke

1
ฉันไม่รู้ว่ามีการเพิ่มเมื่อใด แต่ในที่สุดก็มีเอกสารเกี่ยวกับคำสั่งซื้อ: webpack.js.org/concepts/loaders/#loader-features Loaders สามารถล่ามโซ่ได้ ตัวโหลดแต่ละตัวในสายโซ่ใช้การแปลงกับทรัพยากรที่ประมวลผล โซ่จะดำเนินการตามลำดับย้อนกลับ ตัวโหลดตัวแรกส่งผ่านผลลัพธ์ (ทรัพยากรที่มีการแปลงที่ใช้) ไปยังตัวถัดไปและอื่น ๆ ในที่สุด webpack คาดว่า JavaScript จะถูกส่งคืนโดยตัวโหลดสุดท้ายในห่วงโซ่
Eric Majerus

61

เอกสารอย่างเป็นทางการอธิบายได้ดีจริงๆ น่าเสียดายที่ข้อมูลที่จำเป็นทั้งหมดกระจายอยู่ในส่วนต่างๆของเอกสาร ผมขอสรุปทุกสิ่งที่คุณต้องรู้

1.

ตรวจสอบให้แน่ใจว่าอยู่ในลำดับที่ถูกต้อง (จากล่างขึ้นบน)

2.

เป็นฟังก์ชันที่ใช้แหล่งที่มาของไฟล์ทรัพยากรเป็นพารามิเตอร์และส่งคืนแหล่งข้อมูลใหม่

3.

รถตักสามารถล่ามโซ่ได้ พวกเขาถูกนำไปใช้ในท่อไปยังทรัพยากร ตัวโหลดสุดท้ายคาดว่าจะส่งคืน JavaScript ตัวโหลดซึ่งกันและกันสามารถส่งคืนแหล่งที่มาในรูปแบบที่กำหนดเองซึ่งจะถูกส่งไปยังตัวโหลดถัดไป

ดังนั้น...

ถ้าคุณมีsomefile.cssและคุณจะผ่านมันผ่านloaderOne, loaderTwo,loaderThreeเป็นพฤติกรรมเช่นฟังก์ชั่นถูกล่ามโซ่ปกติ

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

มีความหมายเหมือนกับ ...

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

ถ้าคุณมาจากฮึดฮัด || อึกโลกมันสับสน เพียงอ่านลำดับรถตักจากขวาไปซ้าย


1
ฉันมีอาร์เรย์ของ module.loaders นี้พวกเขาดำเนินการตามลำดับใด
Saras Arya

45
ทำไมพวกเขาถึงโหลดด้านล่างขึ้นไปด้านบน! ??
light24bulbs

คุณอาจต้องการแก้ไขคำตอบเพื่อระบุว่า "ตัวโหลดสุดท้าย" ในเอกสารประกอบอยู่loaderOneในตัวอย่างของคุณ
aaaaaa

1
@ light24bulbs เพื่อให้คุณสามารถเพิ่มรถตักเพิ่มเติมได้โดยง่าย.pushตามกฎและไม่ต้องกังวลเกี่ยวกับการจ่ายล่วงหน้า
Sarke

3

คำตอบนี้มีประโยชน์สำหรับฉัน แต่ฉันต้องการเสริมด้วยจุดอื่นที่มีผลต่อคำสั่งตัวโหลดซึ่งก็คือชื่อโหลด! แนวทาง

สมมติว่าคุณมีurl-loaderconfig ของคุณที่มีลำดับความสำคัญสูงกว่าfile-loaderและคุณต้องการนำเข้าเส้นทางภาพที่หลัง การไม่ทำอะไรเลยจะนำเข้าไฟล์ผ่านurl-loader(ซึ่งสร้าง data-url ที่เข้ารหัส)

คำนำหน้าการนำเข้าด้วยfile-loader!จะนำเข้าสู่ตัวโหลดนั้น

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

3
ใช่แม้ว่าฉันต้องการหลีกเลี่ยงสิ่งนั้นเพราะคุณไม่สามารถตัดสินใจได้ในเวลาสร้างว่าไฟล์ควรเป็นลิงก์หรือฝัง คุณสามารถเริ่มต้นด้วย!!การข้ามรถตักอื่น ๆ BTW …
w00t
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.