Blockdit Logo
Blockdit Logo (Mobile)
สำรวจ
ลงทุน
คำถาม
เข้าสู่ระบบ
มีบัญชีอยู่แล้ว?
เข้าสู่ระบบ
หรือ
ลงทะเบียน
Shoper Gamer
•
ติดตาม
5 พ.ค. เวลา 06:29 • การศึกษา
pnpm คือไร?
โดย
หากคุณเคยทำงานหลายโปรเจกต์พร้อมกัน คุณคงเคยเจอปัญหาสามัญอย่างหนึ่งคือ node_modules กินพื้นที่ฮาร์ดดิสก์มหาศาล เพราะทุกโปรเจกต์ต้องคัดลอกไฟล์เดิมซ้ำแล้วซ้ำเล่า แม้ npm และ Yarn จะมีระบบ Cache แต่ก็ยังจัดการพื้นที่ได้ไม่เบ็ดเสร็จ
pnpm (Performant NPM) ถือกำเนิดขึ้นเพื่อแก้ปัญหานี้โดยเฉพาะ ด้วยการใช้เทคโนโลยี Hard Links และ Content-Addressable Storage ซึ่งเปลี่ยนวิธีการเก็บไฟล์ใหม่ทั้งหมด แทนที่จะคัดลอกไฟล์ซ้ำๆ pnpm จะเก็บแพ็กเกจไว้ที่จุดเดียวในเครื่อง (Global Store) แล้วใช้การเชื่อมโยง ไปยังโปรเจกต์ต่างๆ แทน
ในปี 2026 pnpm ได้กลายเป็นมาตรฐานสำหรับองค์กรขนาดใหญ่ และ โปรเจกต์สมัยใหม่ ด้วยความเร็วที่เหนือชั้น และ ความเป็นระเบียบที่หาตัวจับยากครับ
★
pnpm คืออะไร?
pnpm คือตัวจัดการแพ็กเกจสำหรับ JavaScript/Node.js ที่เน้นความเร็วและความประหยัดพื้นที่ จุดเด่นที่สุดคือการสร้าง Isolated node_modules (โครงสร้างแบบไม่แบนราบ) ซึ่งช่วยแก้ปัญหา Phantom Dependencies หรือการเรียกใช้ไลบรารีที่เราไม่ได้ประกาศไว้ใน package.json ทำให้โปรเจกต์มีความปลอดภัย และ เสถียรขึ้นมาก
★
pnpm ทำงานอย่างไร?
1) ระบบจัดเก็บไฟล์ส่วนกลาง (Global Store)
หัวใจของ pnpm คือการเก็บแพ็กเกจทุกเวอร์ชันไว้ที่ ~/.pnpm-store เพียงที่เดียว เมื่อเราติดตั้งแพ็กเกจในโปรเจกต์ pnpm จะไม่โหลดไฟล์ใหม่ แต่จะสร้าง Hard Link เชื่อมมาจาก Store ทำให้ประหยัดดิสก์ได้มหาศาล (เช่น ถ้าคุณมี 100 โปรเจกต์ที่ใช้ React คุณจะมีไฟล์ React จริงๆ แค่ชุดเดียวในเครื่อง)
2) โครงสร้าง node_modules แบบ Non-Flat
ต่างจาก npm ที่เอาทุกอย่างมาวางกองรวมกันจนวุ่นวาย pnpm จะใช้ Symlinks สร้างโครงสร้างที่เข้มงวด คุณจะมองเห็น และ เรียกใช้ได้เฉพาะแพ็กเกจที่คุณสั่งติดตั้งจริงๆ เท่านั้น ป้องกันบั๊กแปลกๆ ที่เกิดจากการเผลอไปเรียกใช้แพ็กเกจพ่วง (Indirect Dependencies)
3) การจัดการ Monorepo (Workspaces)
pnpm ออกแบบมาเพื่อรองรับโปรเจกต์ยักษ์ใหญ่ที่มีหลายแพ็กเกจย่อย (Monorepo) ได้อย่างยอดเยี่ยม โดยมีคำสั่ง --filter ที่ช่วยให้เราเลือกสั่งรันเฉพาะบางส่วนของโปรเจกต์ได้รวดเร็วและ แม่นยำ
★
ประโยชน์ของ pnpm
✅ ประหยัดพื้นที่ดิสก์อย่างมาก
ลดการซ้ำซ้อนของไฟล์ได้เกือบ 100% โปรเจกต์ขนาดใหญ่อาจเหลือพื้นที่ใช้เพียง 320MB ในขณะที่ตัวอื่นใช้ถึง 1GB
✅ ติดตั้งไวระดับพระกาฬ
เพราะไม่ต้องดาวน์โหลดหรือคัดลอกไฟล์ซ้ำ (Hard Link ทำงานแทบจะทันที)
✅ ความปลอดภัยสูง (Strictness) บังคับให้คุณใช้เฉพาะสิ่งที่ประกาศไว้เท่านั้น ป้องกันบั๊กในระดับโปรดักชัน
✅ จัดการ Node.js ได้ในตัว
มีคำสั่ง pnpm env ที่ใช้เปลี่ยนเวอร์ชัน Node.js ได้เลย (ไม่ต้องลง nvm เพิ่ม)
★
เปรียบเทียบฟีเจอร์สำคัญ
เมื่อเทียบกับตัวจัดการแพ็กเกจอื่นๆ pnpm มีจุดเด่นที่แตกต่างดังนี้:
⚪ Content-Addressable Storage pnpm และ Yarn (v2+) รองรับฟีเจอร์นี้ แต่ npm ยังไม่รองรับ
⚪ Isolated node_modules
pnpm เป็นตัวเดียวที่ให้ฟีเจอร์นี้เป็นค่าเริ่มต้น (ช่วยป้องกัน Phantom Deps)
⚪ ความเร็ว Re-flink (COW)
pnpm ทำได้เร็วมากที่สุดในบรรดาคู่แข่ง
⚪ การจัดการ Lockfile
pnpm ใช้ pnpm-lock.yaml ที่อ่านง่ายและ มีความเป็นระเบียบสูง
⚪ ความปลอดภัยของ Build Script pnpm มีระบบ Isolated เพื่อป้องกันสคริปต์รันข้ามเขตความปลอดภัย
★
ความรู้พื้นฐานที่ควรมีก่อนเริ่ม
1) Node.js & npm
เข้าใจพื้นฐานของไฟล์ package.json
2) Command Line
คุ้นเคยกับการพิมพ์คำสั่งใน Terminal
3) Semantic Versioning (SemVer) เข้าใจการคุมเวอร์ชันแบบ ^, ~ หรือ latest
4) Hard Links & Symlinks
รู้จักความหมายคร่าวๆ ของการสร้างทางลัดให้กับไฟล์
★
ตัวอย่างการใช้งาน
1) การติดตั้ง pnpm
```bash
# ใช้ npm ติดตั้งเพียงครั้งเดียว
npm install -g pnpm
# หรือใช้ Corepack (ติดมากับ Node.js รุ่นใหม่)
corepack enable
corepack prepare pnpm@latest --activate
```
2) คำสั่งพื้นฐาน (คล้าย npm มาก)
```bash
pnpm install
# ติดตั้งตาม package.json
pnpm add lodash
# เพิ่มแพ็กเกจ
pnpm add -D vitest
# เพิ่มแพ็กเกจสำหรับ Dev
pnpm update
# อัปเดตแพ็กเกจ
pnpm store prune
# ล้าง Store เพื่อคืนพื้นที่ดิสก์
```
3) การใช้ใน Monorepo (Workspaces)
เมื่อคุณมีหลายโปรเจกต์ใน Repo เดียว:
```bash
# รัน build เฉพาะในโฟลเดอร์ packages ที่ต้องการ
pnpm --filter "./packages/**" build
```
✏️ Shoper Gamer
>>
https://shopergamer.vercel.app
✓
NodeJS คืออะไร 👇
>>
https://www.blockdit.com/posts/693524dd54c371096e0766af
✓
NodeJS คืออะไร 👇
>>
https://www.blockdit.com/posts/693524dd54c371096e0766af
✓
Yarn คืออะไร 👇
>>
https://www.blockdit.com/posts/69f834fae5a3f8641df82ef8
Credit :
👇
●
https://dev.to/kada/what-is-pnpm-and-why-should-you-use-it-nna
●
https://pnpm.io/pnpm-vs-npm
●
https://codinggun.com/javascript/pnpm/
●
https://sirawit0676.medium.com/เมื่อผมเลิกใช้-npm-กับ-yarn-แล้วหันมาใช้-pnpm-8846f13e4a7e
เทคโนโลยี
ข่าวรอบโลก
nodejs
บันทึก
1
2
1
2
โฆษณา
ดาวน์โหลดแอปพลิเคชัน
© 2026 Blockdit
เกี่ยวกับ
ช่วยเหลือ
คำถามที่พบบ่อย
นโยบายการโฆษณาและบูสต์โพสต์
นโยบายความเป็นส่วนตัว
แนวทางการใช้แบรนด์ Blockdit
Blockdit เพื่อธุรกิจ
ไทย