ข้ามไปเนื้อหาหลัก

Category: reference

pnpm — Package Manager ที่เร็วและประหยัด Disk

คู่มือใช้ pnpm แทน npm/yarn — content-addressable store, strict isolation และ workspace สำหรับ monorepo

· อ่านประมาณ 1 นาที

สารบัญ

ทำไมใช้ pnpm

  • เร็วกว่า npm/yarn — share packages ผ่าน global store, link แทน copy
  • ประหยัด disk — ทุก project ใช้ package ชุดเดียวกัน ไม่ copy ซ้ำ
  • Strict — ป้องกัน “phantom dependencies” (import package ที่ไม่ได้ declare)

คำสั่งพื้นฐาน

# ติดตั้ง
npm install -g pnpm

# เทียบเท่า npm
pnpm install              # npm install
pnpm add lodash           # npm install lodash
pnpm add -D typescript    # npm install -D typescript
pnpm remove lodash        # npm uninstall lodash
pnpm run build            # npm run build
pnpm dlx create-astro     # npx create-astro (run without install)

Workspace สำหรับ Monorepo

# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*'
# รัน script ใน workspace เฉพาะ
pnpm --filter my-app run build

# รัน script ทุก workspace
pnpm -r run test

# install dependency ใน workspace เฉพาะ
pnpm --filter my-lib add react

.pnpmfile.cjs — hook การติดตั้ง

// .pnpmfile.cjs
function readPackage(pkg) {
  // force peer dependency version
  if (pkg.name === 'some-package') {
    pkg.peerDependencies['react'] = '>=18';
  }
  return pkg;
}
module.exports = { hooks: { readPackage } };

Migrate จาก npm

# ลบ node_modules และ lockfile
rm -rf node_modules package-lock.json

# ติดตั้งใหม่ด้วย pnpm (pnpm-lock.yaml จะถูกสร้าง)
pnpm install