pnpm add <package>
เพิ่ม package
pnpm add vite
Options | คำอธิบาย |
---|---|
pnpm add <package_name> --save-prod หรือ -P | เพิ่มเป็น production dependency |
pnpm add <package_name> --save-dev หรือ -D | เพิ่มเป็น development dependency |
pnpm add <package_name> --save-optional หรือ -O | เพิ่มเป็น optional dependency |
pnpm add <package_name> --save-exact หรือ -E | บันทึกเวอร์ชันแบบแน่นอน ไม่ใช้เครื่องหมาย ^ |
pnpm add <package_name> --save-peer | เพิ่มเป็น peer dependency |
pnpm add <package_name> --ignore-workspace-root-check | อนุญาตให้เพิ่ม dependencies ใน root ของ workspace |
pnpm add <package_name> --global หรือ -g | ติดตั้งแพ็คเกจแบบ global |
pnpm add <package_name> --workspace | เพิ่ม workspace packages เป็น dependencies |
pnpm add <package_name> --filter "<package_selector>" | กรองแพ็คเกจที่จะติดตั้งใน monorepo |
pnpm install <package>
ติดตั้ง dependencies ใน package.json => เมื่อติดตั้งแล้วจะอยู่ใน node_modules
pnpm install
# aliases
pnpm i
Options | คำอธิบาย |
---|---|
pnpm install --force | บังคับติดตั้งแพ็คเกจ ไม่สนใจ cache |
pnpm install --offline | ติดตั้งโดยใช้ cache เท่านั้น |
pnpm install --prefer-offline | ใช้ cache ก่อน ถ้าไม่มีจึงดาวน์โหลด |
pnpm install --prod หรือ -P | ติดตั้งเฉพาะ dependencies |
pnpm install --dev หรือ -D | ติดตั้งเฉพาะ devDependencies |
pnpm install --no-optional | ไม่ติดตั้ง optionalDependencies |
pnpm install --lockfile-only | อัพเดท lockfile เท่านั้น |
pnpm install --fix-lockfile | แก้ไข lockfile ที่เสียหาย |
pnpm install --frozen-lockfile | ห้ามอัพเดท lockfile |
pnpm install --merge-git-branch-lockfiles | รวม lockfile จาก Git branches |
pnpm install --reporter=<name> | กำหนดรูปแบบการรายงาน |
pnpm install --use-store-server | ใช้ store server สำหรับการติดตั้ง |
pnpm install --shamefully-hoist | ย้ายทุก dependency ไปที่ root |
pnpm install --ignore-scripts | ไม่รัน scripts หลังติดตั้ง |
pnpm install --filter "<package_selector>" | กรองแพ็คเกจที่จะติดตั้ง |
pnpm install --resolution-only | แก้ปัญหา dependencies เท่านั้น |
pnpm update <package>
อัพเดท package ให้เป็นเวอร์ชั่นล่าสุด
pnpm update vite
Options | คำอธิบาย |
---|---|
pnpm update --recursive หรือ -r | อัพเดททุก package ใน workspace |
pnpm update --latest หรือ -L | อัพเดทเป็นเวอร์ชันล่าสุดที่เข้ากันได้ |
pnpm update --global หรือ -g | อัพเดทแพ็คเกจที่ติดตั้งแบบ global |
pnpm update --workspace | อัพเดทเฉพาะ workspace packages |
pnpm update --prod หรือ -P | อัพเดทเฉพาะ production dependencies |
pnpm update --dev หรือ -D | อัพเดทเฉพาะ development dependencies |
pnpm update --no-optional | ไม่อัพเดท optional dependencies |
pnpm update --interactive หรือ -i | เลือกเวอร์ชันที่จะอัพเดทแบบโต้ตอบ |
pnpm update --filter "<package_selector>" | กรองแพ็คเกจที่จะอัพเดทใน monorepo |
pnpm remove <package>
ลบ package จาก package.json และ node_modules
pnpm remove vite
Options | คำอธิบาย |
---|---|
pnpm remove <package_name> --recursive หรือ -r | ลบแพ็คเกจจากทุกโปรเจ็คใน workspace |
pnpm remove <package_name> --global หรือ -g | ลบแพ็คเกจที่ติดตั้งแบบ global |
pnpm remove <package_name> --save-dev หรือ -D | ลบจาก devDependencies |
pnpm remove <package_name> --save-optional หรือ -O | ลบจาก optionalDependencies |
pnpm remove <package_name> --save-prod หรือ -P | ลบจาก dependencies (production) |
pnpm remove <package_name> --filter "<package_selector>" | กรองแพ็คเกจที่จะลบใน monorepo |
pnpm link <package>
ลิงค์ package
pnpm link <dir>
Options | คำอธิบาย |
---|---|
pnpm link --dir <dir> หรือ -C | ระบุไดเรกทอรีที่จะทำการ link |
pnpm link <dir> | สร้าง symlink ของแพ็คเกจปัจจุบันใน global store |
pnpm link | link แพ็คเกจจาก global store มายังโปรเจ็คปัจจุบัน |
pnpm link <pkg> | link แพ็คเกจที่ระบุจาก global store มายังโปรเจ็คปัจจุบัน |
pnpm link --global | ทำการ link แบบ global |
pnpm link --global <pkg> | link แพ็คเกจที่ระบุแบบ global |
pnpm unlink <package>
package
pnpm unlink
Options | คำอธิบาย |
---|---|
pnpm unlink --recursive หรือ -r | ยกเลิกการ link แบบ recursive ในทุกแพ็คเกจของ workspace |
pnpm unlink --filter "<package_selector>" | กรองแพ็คเกจที่จะยกเลิกการ link ใน monorepo |
pnpm import <package>
เพิ่มพิมพ์ pnpm inport จะสร้างไฟล์ pnpm-lock.yaml
package-lock.yaml คืออะไร
pnpm-lock.yaml คือไฟล์ล็อคเวอร์ชันที่ใช้ในระบบการจัดการแพ็คเกจของ pnpm ซึ่งมีความสำคัญและประโยชน์หลายประการ ดังนี้:
- ล็อคเวอร์ชัน: ไฟล์นี้เก็บข้อมูลเวอร์ชันที่แน่นอนของทุกแพ็คเกจที่โปรเจ็คใช้ รวมถึง dependencies และ sub-dependencies
- ความสอดคล้อง: ช่วยให้มั่นใจว่าทุกคนในทีมและทุกสภาพแวดล้อม (เช่น เครื่องพัฒนา, CI/CD) ใช้เวอร์ชันเดียวกันของแพ็คเกจ
- ความเสถียร: ป้องกันปัญหา "works on my machine" โดยรับประกันว่าทุกคนติดตั้งแพ็คเกจเวอร์ชันเดียวกัน
- ประสิทธิภาพ: ช่วยให้ pnpm ติดตั้งแพ็คเกจได้เร็วขึ้น เพราะรู้เวอร์ชันที่แน่นอนโดยไม่ต้องคำนวณใหม่
- ความปลอดภัย: ลดความเสี่ยงจากการติดตั้งแพ็คเกจที่อาจมีช่องโหว่โดยไม่ตั้งใจ
- การควบคุมเวอร์ชัน: ควรเก็บไฟล์นี้ไว้ใน version control (เช่น Git) เพื่อติดตามการเปลี่ยนแปลงของ dependencies
- การทำงานร่วมกัน: ช่วยให้ทีมสามารถจัดการ dependencies ร่วมกันได้อย่างมีประสิทธิภาพ
- การย้อนกลับ: สามารถย้อนกลับไปใช้เวอร์ชันก่อนหน้าได้ง่าย หากพบปัญหาจากการอัพเดท
- ข้อมูลเพิ่มเติม: เก็บข้อมูลอื่นๆ เช่น integrity hashes เพื่อตรวจสอบความถูกต้องของแพ็คเกจ
pnpm import
pnpm rebuild <package>
สร้าง package ใหม่
pnpm rebuild
Options | คำอธิบาย |
---|---|
pnpm rebuild --recursive หรือ -r | สร้าง native addons ใหม่แบบ recursive ในทุกแพ็คเกจของ workspace |
pnpm rebuild --filter "<package_selector>" | กรองแพ็คเกจที่จะสร้างใหม่ใน monorepo |
pnpm prune <package>
ลบ packages ที่ไม่จำเป็น
pnpm prune
Options | คำอธิบาย |
---|---|
pnpm prune --prod | ลบเฉพาะ devDependencies |
pnpm prune --no-optional | ไม่ลบ optionalDependencies |
pnpm fetch <package>
fetch package จาก lockfile ไปใน virtual store => ออกแบบเพื่อเพิ่มประสิทธิภาพในการ build docker image
pnpm prune
ก่อนใช้ fetch
FROM node:20
WORKDIR /path/to/somewhere
RUN corepack enable pnpm && corepack install -g pnpm@latest-9
# Files required by pnpm install
COPY .npmrc package.json pnpm-lock.yaml .pnpmfile.cjs ./
# If you patched any package, include patches before install too
COPY patches patches
# for each sub-package, we have to add one extra step to copy its manifest
# to the right place, as docker have no way to filter out only package.json with
# single instruction
COPY packages/foo/package.json packages/foo/
COPY packages/bar/package.json packages/bar/
RUN pnpm install --frozen-lockfile --prod
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
หลังใช้ fetch
FROM node:20
WORKDIR /path/to/somewhere
RUN corepack enable pnpm && corepack install -g pnpm@latest-9
# pnpm fetch does require only lockfile
COPY pnpm-lock.yaml ./
# If you patched any package, include patches before running pnpm fetch
COPY patches patches
RUN pnpm fetch --prod
ADD . ./
RUN pnpm install -r --offline --prod
EXPOSE 8080
CMD [ "node", "server.js" ]
Option | คำอธิบาย |
---|---|
pnpm fetch --dev, -D | ดึงเฉพาะ devDependencies |
pnpm fetch --prod, -P | ดึงเฉพาะ dependencies (ไม่รวม devDependencies) |
pnpm dudupe <package>
จัดการกับการซ้ำซ้อนของ dependencies โดยเฉพาะในโปรเจ็คที่มีการใช้หลายเวอร์ชันของแพ็คเกจเดียวกัน คำสั่งนี้จะช่วยให้คุณทำการ dedupe (ลดการซ้ำซ้อน) ของ dependencies ที่ติดตั้งในโปรเจ็คของคุณให้เหลือเพียงเวอร์ชันเดียวที่ใช้ร่วมกันได้
pnpm dedupe
Options | คำอธิบาย |
---|---|
pnpm dedupe --check | ตรวจสอบว่ามี dependencies ที่ซ้ำซ้อนหรือไม่ โดยไม่ทำการ dedupe |