เจาะลึก package.json
package.json คืออะไร?
หัวข้อที่มีชื่อว่า “package.json คืออะไร?”package.json คือไฟล์ manifest ที่อยู่ที่ root ของทุกโปรเจกต์ Node.js ไฟล์นี้เก็บข้อมูลสำคัญเกี่ยวกับโปรเจกต์ของคุณ: ชื่อ, เวอร์ชัน, dependencies, scripts, และอีกมากมาย npm ใช้ไฟล์นี้เพื่อติดตั้ง dependencies, รัน scripts, และเผยแพร่แพ็คเกจไปยัง registry
ฟิลด์สำคัญ
หัวข้อที่มีชื่อว่า “ฟิลด์สำคัญ”{ "name": "my-app", "version": "1.0.0", "description": "A sample Node.js application", "main": "index.js", "type": "module", "scripts": { "start": "node index.js", "dev": "node --watch index.js", "test": "node --test" }, "dependencies": { "express": "^4.18.2" }, "devDependencies": { "typescript": "^5.3.3" }, "engines": { "node": ">=20.0.0" }}name— ชื่อแพ็คเกจ ต้องเป็น lowercase และไม่มีช่องว่างversion— เวอร์ชันปัจจุบันในรูปแบบ semver (major.minor.patch)main— entry point สำหรับ CommonJS (require('my-app')จะโหลดไฟล์นี้)type— กำหนดว่า.jsfiles เป็น CJS หรือ ESM โดยค่าเริ่มต้นscripts— คำสั่งที่รันด้วยnpm run <name>dependencies— แพ็คเกจที่จำเป็นสำหรับ productiondevDependencies— แพ็คเกจที่ใช้เฉพาะในการพัฒนา (เช่น test runners, bundlers)engines— ระบุเวอร์ชัน Node.js ที่รองรับ
Semver ranges
หัวข้อที่มีชื่อว่า “Semver ranges”npm ใช้ Semantic Versioning (semver) สำหรับ version constraints ไวยากรณ์ range ที่พบบ่อยมีดังนี้:
| Range | ความหมาย | ตัวอย่าง |
|---|---|---|
^4.18.2 | minor และ patch ล่าสุดที่ compatible กับ major version นี้ | >=4.18.2 <5.0.0 |
~4.18.2 | patch ล่าสุดที่ compatible กับ minor version นี้ | >=4.18.2 <4.19.0 |
4.18.2 | เวอร์ชันนี้เท่านั้น (pinned) | 4.18.2 เท่านั้น |
>=4.0.0 | เวอร์ชัน 4.0.0 ขึ้นไป | ไม่มีขีดบน |
* | เวอร์ชันใดก็ได้ | ไม่แนะนำใน production |
^ (caret) คือ range ที่ใช้บ่อยที่สุด — เพราะเลือก patch และ minor releases ที่ใหม่กว่าโดยอัตโนมัติ แต่ lock major version เพื่อหลีกเลี่ยง breaking changes
การสร้าง package.json ด้วย npm init
หัวข้อที่มีชื่อว่า “การสร้าง package.json ด้วย npm init”# Interactive wizard — ถามคุณทีละขั้นnpm init
# สร้างด้วยค่า default ทันที (ไม่ถาม)npm init -ynpm init -y สร้าง package.json ที่ถูกต้องด้วยค่า default ทันที มีประโยชน์สำหรับโปรเจกต์ใหม่ที่คุณต้องการติดตั้งแพ็คเกจอย่างรวดเร็ว
การติดตั้ง dependencies
หัวข้อที่มีชื่อว่า “การติดตั้ง dependencies”# เพิ่ม production dependencynpm install express
# เพิ่ม dev dependencynpm install --save-dev typescript
# ติดตั้ง dependencies ทั้งหมดจาก package.json ที่มีอยู่แล้วnpm installเมื่อคุณรัน npm install <package> npm จะอัปเดต package.json และ package-lock.json โดยอัตโนมัติ package-lock.json เก็บเวอร์ชันที่แน่นอนของทุก dependency เพื่อให้ builds สามารถ reproduce ได้