Category: reference
pnpm — Package Manager ที่เร็วและประหยัด Disk
คู่มือใช้ pnpm แทน npm/yarn — content-addressable store, strict isolation และ workspace สำหรับ monorepo
สารบัญ
ทำไมใช้ 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