npm: พื้นฐาน, ตัวจัดการแพ็คเกจสำหรับ React Native และ Node.js

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-02-13 เวลาอ่าน: 10 นาที

npm (Node Package Manager) เป็นตัวจัดการแพ็คเกจมาตรฐานสำหรับแพลตฟอร์ม Node.js ซึ่งมาพร้อมกับการติดตั้ง Node.js npm จัดการ dependencies ของโปรเจกต์ JavaScript และ TypeScript: ติดตั้งไลบรารีใน node_modules, อัปเดตเวอร์ชันแพ็คเกจ, แก้ไขข้อขัดแย้งของเวอร์ชัน package.json เป็นไฟล์กำหนดค่าส่วนกลางที่มีเมตาดาต้าและรายการ dependencies npm Registry เป็นรีจิสทรีแพ็คเกจที่ใหญ่ที่สุด เรียนรู้เพิ่มเติมที่ npm Registry

ประเด็นสำคัญ

  • npm — ตัวจัดการแพ็คเกจมาตรฐานของ Node.js มาพร้อมกับ Node.js ตั้งแต่เวอร์ชัน 0.6.3
  • package.json — ไฟล์กำหนดค่าโปรเจกต์ที่มี dependencies, สคริปต์ และเมตาดาต้า
  • npm install — คำสั่งพื้นฐานสำหรับติดตั้ง dependencies จาก package.json ไปยังโฟลเดอร์ node_modules
  • package-lock.json — ไฟล์ล็อกเวอร์ชันที่แน่นอนสำหรับการติดตั้งที่ทำซ้ำได้ในทุกสภาพแวดล้อม
  • npm ci — คำสั่ง CI/CD ที่ติดตั้งแพ็คเกจตามไฟล์ล็อกอย่างเคร่งครัดโดยไม่อัปเดต

npm คืออะไร — ตัวจัดการแพ็คเกจ Node.js?

npm ถูกสร้างขึ้นในปี 2010 โดย Isaac Schlueter เพื่อเป็นโซลูชันสำหรับจัดการ dependencies ของ Node.js ตั้งแต่ปี 2014 npm ถูกจัดการโดย npm, Inc. ซึ่งถูก Microsoft/GitHub เข้าซื้อในปี 2020 เครื่องมือประกอบด้วยสองส่วน: CLI (บรรทัดคำสั่ง) สำหรับติดตั้งและจัดการแพ็คเกจ และ Registry — คลังกลางของโมดูลที่เผยแพร่ทั้งหมดที่ registry.npmjs.org

npm Registry เป็นรีจิสทรีแพ็คเกจที่ใหญ่ที่สุด: มากกว่า 2 ล้าน แพ็คเกจและมากกว่า 10 พันล้านดาวน์โหลดต่อเดือน แต่ละแพ็คเกจมีเวอร์ชัน SemVer, คำอธิบาย, dependencies, ใบอนุญาต และผู้แต่ง การเผยแพร่แพ็คเกจของคุณเองทำผ่าน npm publish npm รองรับแพ็คเกจแบบมีขอบเขตสำหรับองค์กร (@scope/package), รีจิสทรีส่วนตัว และการตรวจสอบความปลอดภัยในตัว

Node.js เวอร์ชัน 18+ มาพร้อม npm 9+ ที่มีประสิทธิภาพดีขึ้น, workspaces สำหรับ monorepo และกลไก peer dependencies ที่ได้รับการออกแบบใหม่ ระบบนิเวศ npm ครอบคลุม JavaScript ฝั่งเซิร์ฟเวอร์, frontend (React, Vue, Angular), การพัฒนามือถือ (React Native), เครื่องมือ build (Webpack, Vite) และยูทิลิตี้ CLI npm เป็นช่องทางหลักในการแจกจ่ายไลบรารี JavaScript

คุณสมบัติหลักของ npm

npm install — คำสั่งหลักที่อ่าน package.json และ package-lock.json เพื่อติดตั้ง dependencies ทั้งหมดใน node_modules ในการทำงานครั้งแรก npm จะคำนวณกราฟ dependencies, แก้ไขข้อขัดแย้งของเวอร์ชัน และสร้าง package-lock.json คำสั่ง npm install <package> ติดตั้งแพ็คเกจเฉพาะ; แฟลก --save-dev เพิ่มเข้าไปใน devDependencies, --global ติดตั้งทั่วโลก

npx — ตัวเรียกใช้แพ็คเกจที่มาพร้อมกับ npm ตั้งแต่เวอร์ชัน 5.2 npx อนุญาตให้เรียกใช้ยูทิลิตี้ CLI โดยไม่ต้องติดตั้งทั่วโลก: npx react-native init หรือ npx create-react-app my-app npx ดาวน์โหลดแพ็คเกจไปยังแคชชั่วคราว เรียกใช้ และล้างข้อมูลเมื่อเสร็จสิ้น npx ยังมีประโยชน์สำหรับการเรียกใช้เครื่องมือเวอร์ชันเฉพาะ

npm audit สแกนทรี dependencies เพื่อหาช่องโหว่ที่รู้จักจากฐานข้อมูล npm คำสั่งแสดงรายงานพร้อมระดับความรุนแรง (critical, high, moderate) และแนะนำ npm audit fix เพื่ออัปเดตแพ็คเกจที่มีช่องโหว่โดยอัตโนมัติ npm cache จัดเก็บแพ็คเกจที่ดาวน์โหลดในเครื่อง npm cache clean --force ล้างแคชเมื่อมีปัญหาการติดตั้ง npm outdated แสดงแพ็คเกจที่ล้าสมัย

bash
# คำสั่ง npm พื้นฐาน
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# การเรียกใช้โดยไม่ต้องติดตั้งทั่วโลก
$ npx react-native init MyApp
# การตรวจสอบความปลอดภัย
$ npm audit --fix

โครงสร้าง package.json และการจัดการ dependencies

package.json คือไฟล์ JSON ในรูทของโปรเจกต์ที่อธิบายเมตาดาต้า, dependencies และการกำหนดค่า ฟิลด์ที่จำเป็น: name (ชื่อแพ็คเกจที่ไม่ซ้ำกัน) และ version (เวอร์ชัน SemVer เช่น 1.0.0) ไฟล์ถูกสร้างขึ้นด้วย npm init -y สำหรับการเริ่มต้นอย่างรวดเร็วหรือด้วยตนเอง

Semantic Versioning (SemVer) เป็นมาตรฐานการกำหนดเวอร์ชันในรูปแบบ MAJOR.MINOR.PATCH เวอร์ชันหลักเปลี่ยนแปลงเมื่อมีการเปลี่ยนแปลง API ที่ไม่เข้ากันได้ เวอร์ชันรองเมื่อเพิ่มฟังก์ชัน (ย้อนหลังเข้ากันได้) และแพตช์เมื่อแก้ไขบั๊ก สัญลักษณ์ ^ ก่อนเวอร์ชันอนุญาตให้อัปเดตเวอร์ชันรองและแพตช์ ในขณะที่ ~ อนุญาตเฉพาะการอัปเดตแพตช์

json
{
  "name": "my-app",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios"
  },
  "dependencies": {
    "react": "^18.3.0",
    "react-native": "^0.76.0"
  },
  "devDependencies": {
    "typescript": "^5.5.0",
    "@types/react": "^18.3.0"
  }
}
ฟิลด์วัตถุประสงค์ตัวอย่างค่า
scriptsคำสั่งเรียกใช้สำหรับ npm run"start": "node index.js"
dependenciesdependencies ฝั่งโปรดักชันของแอปพลิเคชัน"react": "^18.3.0"
devDependenciesเครื่องมือพัฒนาและทดสอบ"jest": "^29.7.0"
peerDependenciesdependencies โฮสต์สำหรับไลบรารี"react": ">=17.0.0"
enginesข้อกำหนดเวอร์ชัน Node.js{"node": ">=18.0.0"}

npm ในการพัฒนา React Native

โปรเจกต์ React Native ใช้ npm อย่างแข็งขันในการจัดการ dependencies ชุดมาตรฐานประกอบด้วย react, react-native, ไลบรารีการนำทาง (React Navigation), ไลบรารี HTTP (axios), การจัดการสถานะ (Redux, Zustand) และส่วนประกอบ UI npm อนุญาตให้ติดตั้งแพ็คเกจที่เข้ากันได้นับพันจากรีจิสทรี

npx pod-install — คำสั่งที่จำเป็นหลังจากติดตั้งโมดูลเนทีฟใน React Native สำหรับ iOS npm สร้าง Podfile.lock โดยอัตโนมัติตาม package-lock.json ในโปรเจกต์ Expo ใช้ expo install แทน npm install เพราะเลือกเวอร์ชันที่เข้ากันได้กับเวอร์ชัน Expo SDK ปัจจุบัน

ข้อขัดแย้งของเวอร์ชัน เป็นปัญหาทั่วไปใน React Native: react-native-reanimated, react-native-gesture-handler และ react-native-safe-area-context ต้องการเวอร์ชันที่สอดคล้องกัน วิธีแก้คืออัปเดตแพ็คเกจทั้งหมดเป็นเวอร์ชันที่เข้ากันได้ล่าสุดหรือใช้ --legacy-peer-deps package-lock.json สำคัญสำหรับโมดูลเนทีฟที่คอมไพล์ผ่าน CocoaPods และ Gradle

การเปรียบเทียบ npm กับตัวจัดการอื่น

npm เป็นตัวจัดการแพ็คเกจมาตรฐานที่มาพร้อมกับ Node.js ตัวเลือกหลัก: yarn (สร้างโดย Facebook ในปี 2016) และ pnpm (รวดเร็ว พร้อมฮาร์ดลิงก์) ตั้งแต่ npm 5 ความแตกต่างด้านความเร็วและฟังก์ชันระหว่าง npm และ yarn นั้นน้อยมาก npm 7+ เพิ่ม workspaces ทำให้แข่งขันได้สำหรับ monorepo

คุณลักษณะnpmyarnpnpm
ปีที่สร้าง201020162017
ไฟล์ล็อกpackage-lock.jsonyarn.lockpnpm-lock.yaml
การติดตั้งตามลำดับ (npm 5+)ขนานขนาน
พื้นที่ดิสก์มาตรฐานมาตรฐานน้อยที่สุด (ลิงก์)
Workspacesใช่ (npm 7+)ใช่ใช่
Plug'n'Playไม่ใช่ไม่

ตาม State of JS 2025: 62% ของนักพัฒนาใช้ npm, 35% ใช้ yarn (ส่วนใหญ่เป็นโปรเจกต์เก่าและผู้ชื่นชอบ PnP) และ 3% ใช้ pnpm สำหรับโปรเจกต์ React Native ทั้งสองเครื่องมือทำงานได้เท่าเทียมกัน แต่ npm พบได้บ่อยกว่าในโปรเจกต์ที่ใช้ Expo SDK 50+ และการเริ่มต้น React Native ใหม่

yarn ยังคงข้อได้เปรียบใน monorepo ขนาดใหญ่พิเศษ (100+ แพ็คเกจ) เนื่องจากการใช้งาน workspaces และ Plug'n'Play ที่สมบูรณ์กว่า pnpm ชนะในด้านการประหยัดพื้นที่ดิสก์ผ่านฮาร์ดลิงก์ไปยังสโตร์ส่วนกลาง การเลือกตัวจัดการขึ้นอยู่กับความชอบของทีมและโครงสร้างพื้นฐาน

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

npm install และ npm ci แตกต่างกันอย่างไร?

npm install อัปเดต package-lock.json และอาจติดตั้งเวอร์ชันรองใหม่ภายในช่วงความหมาย npm ci (Clean Install) ลบ node_modules และติดตั้งแพ็คเกจตาม package-lock.json อย่างเคร่งครัดโดยไม่อัปเดต npm ci เร็วกว่า ใช้ใน CI/CD และรับประกันสภาพแวดล้อมที่เหมือนกันบนทุกเครื่อง หากไม่มี package-lock.json npm ci จะแสดงข้อผิดพลาด

จะแก้ไขข้อขัดแย้ง peer dependencies ใน npm ได้อย่างไร?

ตั้งแต่ npm 7 เป็นต้นไป ข้อขัดแย้ง peer dependencies ทำให้เกิดข้อผิดพลาดในการ build วิธีแก้: อัปเดตแพ็คเกจทั้งหมดเป็นเวอร์ชันที่เข้ากันได้ผ่าน npm update ใช้แฟลก --legacy-peer-deps สำหรับโหมด npm 6 หรือเพิ่มส่วน overrides ใน package.json เพื่อบังคับใช้เวอร์ชันของแพ็คเกจเฉพาะ ตัวเลือกที่ดีที่สุดคืออัปเดต dependencies เป็นเวอร์ชันที่เข้ากันได้

npm audit คืออะไรและจำเป็นอย่างไร?

npm audit สแกนทรี dependencies เพื่อหาช่องโหว่ที่รู้จักจากฐานข้อมูล npm Security Advisory คำสั่งแสดงรายงานพร้อมระดับความรุนแรง (critical, high, moderate, low) และแนะนำ npm audit fix เพื่ออัปเดตแพ็คเกจที่มีช่องโหว่เป็นเวอร์ชันปลอดภัยโดยอัตโนมัติ การเรียกใช้ npm audit เป็นประจำคือแนวปฏิบัติด้านความปลอดภัยพื้นฐานสำหรับโปรเจกต์ JavaScript

npm workspaces ทำให้ monorepo ง่ายขึ้นอย่างไร?

npm workspaces อนุญาตให้จัดการหลายแพ็คเกจในที่เก็บเดียว เพิ่มฟิลด์ "workspaces": ["packages/*"] ใน package.json หลัก ข้อดี: การติดตั้ง dependencies ทั้งหมดครั้งเดียวใน node_modules ที่ใช้ร่วมกัน, symlinks อัตโนมัติระหว่างแพ็คเกจภายใน, การเรียกใช้สคริปต์สำหรับทุกแพ็คเกจจากรูท และการขจัดความซ้ำซ้อนของเวอร์ชัน

ทำไมต้อง commit package-lock.json ในที่เก็บ?

package-lock.json ล็อกเวอร์ชันที่แน่นอนของ dependencies ทั้งหมดและแพ็คเกจถ่ายทอดของพวกมัน หากไม่มีไฟล์นี้ นักพัฒนาและเซิร์ฟเวอร์ CI ที่แตกต่างกันอาจได้รับเวอร์ชันไลบรารีที่แตกต่างกันในช่วงความหมาย ซึ่งนำไปสู่ข้อผิดพลาด «ทำงานบนเครื่องของฉัน» การ commit ไฟล์ล็อกรับประกัน build ที่ทำซ้ำได้และพฤติกรรมที่เหมือนกันในทุกสภาพแวดล้อม

สรุป

  • npm — ตัวจัดการแพ็คเกจมาตรฐานของ Node.js มาพร้อมกับ Node.js ตั้งแต่เวอร์ชัน 0.6.3
  • package.json — ไฟล์กำหนดค่าโปรเจกต์ที่มี dependencies, สคริปต์ และเมตาดาต้า
  • npm install — ติดตั้ง dependencies, npm ci — ติดตั้งตาม package-lock.json สำหรับ CI/CD
  • package-lock.json — ล็อกเวอร์ชันที่แน่นอน จำเป็นสำหรับ build ที่ทำซ้ำได้
  • npm Registry — รีจิสทรีแพ็คเกจที่ใหญ่ที่สุดที่มีมากกว่า 2 ล้านโมดูล
  • npm audit — การตรวจสอบความปลอดภัยของ dependencies พร้อมการแก้ไขช่องโหว่อัตโนมัติ
  • npm workspaces — กลไกการจัดการ monorepo พร้อม node_modules ที่ใช้ร่วมกัน

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม