0Pricing
React Academy · บทเรียน

การบันเดิลด้วย Rollup และ tsup สำหรับไลบรารี

กำหนดค่า Rollup หรือ tsup เพื่อบันเดิลคอมโพเนนต์ React โดยแยก React และ ReactDOM เป็นสิ่งภายนอกอย่างถูกต้อง

การบันเดิลด้วย Rollup และ tsup สำหรับไลบรารี เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงไม่ใช้ Vite สำหรับไลบรารี

การตั้งค่าเริ่มต้นของ Vite ปรับให้เหมาะกับแอปพลิเคชัน โดยจะรวมไฟล์ จัดการทรัพยากร และสร้าง index.html สำหรับไลบรารีคอมโพเนนต์ คุณต้องการผลลัพธ์ที่แตกต่างออกไป นั่นคือไฟล์ JavaScript แบบ ESM/CJS ล้วนที่ไม่มีค่าใช้จ่ายขณะทำงาน ไม่มี React ที่รวมมาด้วย และมีคำประกาศ TypeScript ที่ถูกต้อง โหมดไลบรารีของ Vite ใช้งานได้ แต่ Rollup และ tsup ออกแบบมาเฉพาะทางกว่าสำหรับงานนี้

Rollup: มาตรฐานสำหรับไลบรารี

Rollup เป็นตัวรวมไฟล์มาตรฐานสำหรับไลบรารี JavaScript มาหลายปีแล้ว โดยสร้างผลลัพธ์ที่สะอาดและมีประสิทธิภาพ พร้อมการตัดโค้ดที่ไม่ได้ใช้งานอย่างยอดเยี่ยม และรองรับรูปแบบผลลัพธ์ทั้ง ESM และ CJS การยกขอบเขตโมดูลของ Rollup ช่วยขจัดค่าใช้จ่ายส่วนเกินจากตัวห่อโมดูล ทำให้ได้ชุดไฟล์ไลบรารีที่มีขนาดเล็กที่สุดเท่าที่เป็นไปได้

tsup: ทางเลือกที่ไม่ต้องตั้งค่า

tsup เป็นตัวรวมไฟล์ TypeScript ที่ไม่ต้องตั้งค่า โดยขับเคลื่อนด้วย esbuild และทำงานเร็วกว่า Rollup อย่างมาก (esbuild คอมไพล์เสร็จในระดับไมโครวินาที เทียบกับระดับมิลลิวินาที) การตั้งค่าขั้นต่ำคือ { entry: ['src/index.ts'], format: ['esm', 'cjs'], dts: true } ซึ่งสร้างทั้งรูปแบบโมดูลและคำประกาศ TypeScript โดยอัตโนมัติ

ตัวเลือกการตั้งค่าหลักของ tsup

ตัวเลือกหลักของ tsup ได้แก่ จุดเข้า ซึ่งเป็นอาร์เรย์ของไฟล์จุดเข้า รูปแบบ ใช้ระบุรูปแบบผลลัพธ์: ['esm', 'cjs'] คำประกาศ: true จะสร้างไฟล์คำประกาศ TypeScript .d.ts ควบคู่กับผลลัพธ์ JS เป้าหมาย ใช้กำหนดสภาพแวดล้อม JavaScript ขั้นต่ำ (esnext หรือ es2020) และ การแยกไฟล์: false จะทำให้ผลลัพธ์อยู่ในไฟล์เดียว

ข้อแลกเปลี่ยนระหว่าง esbuild กับ Rollup

esbuild (ผ่าน tsup) คอมไพล์ได้เร็วกว่า Rollup 10–100 เท่า Rollup สร้างผลลัพธ์ที่ปรับให้เหมาะสมกว่าเล็กน้อย โดยมีระดับความละเอียดในการตัดส่วนที่ไม่ใช้งานและการควบคุมขอบเขตของชังก์ที่ดีกว่า สำหรับไลบรารีคอมโพเนนต์ส่วนใหญ่ ความเร็วของ tsup เหมาะกว่าในระหว่างการพัฒนา หากต้องการควบคุมการตัดส่วนที่ไม่ใช้งานอย่างละเอียดที่สุด หรือต้องตั้งค่าหลายจุดเริ่มต้นที่ซับซ้อน ควรใช้ Rollup

การทำเครื่องหมายให้ React เป็นภายนอก

การกำหนดค่าตัวรวมบันเดิลที่สำคัญที่สุดสำหรับไลบรารี React คือ อย่ารวม React หรือ ReactDOM ไว้ในบันเดิลเด็ดขาด ให้ทำเครื่องหมายทั้งสองรายการเป็นภายนอกเพื่อไม่ให้รวมอยู่ในผลลัพธ์ หากไลบรารีของคุณรวม React ไว้ ผู้ใช้จะมี React สองชุด ได้แก่ชุดหนึ่งจากบันเดิลของคุณและอีกชุดจากแอปของผู้ใช้ ซึ่งจะทำให้ฮุกของ React ทั้งหมดทำงานผิดพลาดเนื่องจากมีอินสแตนซ์ React หลายชุด

การกำหนดค่ารายการภายนอกใน tsup

ในการกำหนดค่า tsup ให้ใช้ตัวเลือก external: external: ['react', 'react-dom'] ในการกำหนดค่า Rollup ให้ตั้งค่า external: ['react', 'react-dom', 'react/jsx-runtime'] ให้รวม react/jsx-runtime ด้วย หากไลบรารีของคุณใช้ JSX Transform และให้กำหนดข้อกำหนดร่วมอื่น ๆ ที่ไลบรารีของคุณประกาศไว้เป็นรายการภายนอกด้วย

ปลั๊กอิน Rollup สำหรับ TypeScript

การกำหนดค่า Rollup ขั้นต่ำสำหรับไลบรารี TypeScript ต้องใช้ปลั๊กอินสามตัว ได้แก่ @rollup/plugin-typescript สำหรับคอมไพล์ TypeScript, @rollup/plugin-node-resolve เพื่อแก้ไขการนำเข้าจาก node_modules และ @rollup/plugin-commonjs เพื่อแปลง dependency ของ CommonJS เป็น ESM สำหรับบันเดิล ให้เพิ่ม rollup-plugin-dts สำหรับไฟล์ประกาศด้วย

โครงสร้างไดเรกทอรีผลลัพธ์

ผลลัพธ์ทั่วไปของไลบรารีที่รองรับสองรูปแบบ ได้แก่ dist/esm/index.js และ dist/esm/index.d.ts สำหรับผู้ใช้ ESM รวมถึง dist/cjs/index.js และ dist/cjs/index.cjs สำหรับผู้ใช้ CJS ฟิลด์ exports ใน package.json จะจับคู่เส้นทางเหล่านี้กับสภาพแวดล้อมที่ถูกต้อง ไฟล์ประกาศ TypeScript จะอยู่คู่กับไฟล์ JS ที่สอดคล้องกัน

จุดเริ่มต้นหลายจุด

ไลบรารีขนาดใหญ่จะได้ประโยชน์จากจุดเริ่มต้นหลายจุด เพื่อให้ผู้ใช้สามารถนำเข้าเฉพาะสิ่งที่ต้องการได้ ตัวอย่างเช่น entry: ['src/index.ts', 'src/utils.ts', 'src/hooks.ts'] จุดเริ่มต้นแต่ละจุดจะมีไฟล์ผลลัพธ์ของตัวเอง ฟิลด์ exports ใน package.json จะจับคู่เส้นทางสาธารณะแต่ละเส้นทางกับผลลัพธ์ของตนเอง: './utils' → './dist/utils.js'

สคริปต์สร้างใน package.json

เพิ่มคำสั่งสร้างลงในสคริปต์ของ package.json: "build": "tsup" tsup จะอ่านการกำหนดค่าจาก tsup.config.ts ที่ไดเรกทอรีราก สคริปต์ prepublish ควรเรียกใช้การสร้าง: "prepublishOnly": "npm run build" เพื่อให้แน่ใจว่าแพ็กเกจของคุณถูกสร้างเสมอก่อนเผยแพร่ไปยัง npm

React ภายนอกในบันเดิลของไลบรารี

เหตุใดจึงต้องทำเครื่องหมายให้ React เป็นภายนอกเมื่อรวมไลบรารีคอมโพเนนต์ React

สรุปบทเรียน: การรวมไลบรารี

tsup ซึ่งขับเคลื่อนด้วย esbuild ให้การสร้างบันเดิลที่รวดเร็วโดยไม่ต้องกำหนดค่ามาก โดยใช้ format: ['esm', 'cjs'] และ dts: true ส่วน Rollup ให้การควบคุมการตัดส่วนที่ไม่ใช้งานในระดับละเอียดกว่าเมื่อใช้ @rollup/plugin-typescript กฎสำคัญคือ ต้องทำเครื่องหมายให้ react, react-dom และข้อกำหนดร่วมทั้งหมดเป็นรายการภายนอกเสมอ เพื่อป้องกันไม่ให้รวมสิ่งเหล่านี้ไว้ในบันเดิล ให้สร้างผลลัพธ์ไว้ใน dist/esm/ และ dist/cjs/ พร้อมไฟล์ประกาศ TypeScript ที่สร้างควบคู่กัน จุดเริ่มต้นหลายจุดช่วยให้ผู้ใช้สามารถตัดส่วนที่ไม่ใช้งานได้อย่างละเอียด

คำถามที่พบบ่อย

บทเรียน “การบันเดิลด้วย Rollup และ tsup สำหรับไลบรารี” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การบันเดิลด้วย Rollup และ tsup สำหรับไลบรารี” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การบันเดิลด้วย Rollup และ tsup สำหรับไลบรารี”

กำหนดค่า Rollup หรือ tsup เพื่อบันเดิลคอมโพเนนต์ React โดยแยก React และ ReactDOM เป็นสิ่งภายนอกอย่างถูกต้อง คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การบันเดิลด้วย Rollup และ tsup สำหรับไลบรารี” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การบันเดิลด้วย Rollup และ tsup สำหรับไลบรารี
  2. เอาต์พุตแพ็กเกจคู่ ESM และ CJS
  3. สิ่งที่ต้องพึ่งพาแบบเพียร์และการตัดต้นไม้
  4. การเผยแพร่ไปยัง npm และการกำหนดเวอร์ชันเชิงความหมาย
← กลับไปที่ React Academy