การจัดการ Dependencies
package.json แยก dependency ออกเป็นหลายส่วนตามจุดประสงค์การใช้งาน การเข้าใจความแตกต่างช่วยให้ production bundle มีขนาดเล็กลง ป้องกัน peer conflict และทำให้ CI builds มีความน่าเชื่อถือ
dependencies
หัวข้อที่มีชื่อว่า “dependencies”dependencies คือ package ที่โค้ดของคุณต้องการเมื่อ ทำงานจริง เมื่อผู้ใช้ติดตั้ง package ของคุณ npm จะ install dependencies เหล่านี้ไปด้วย
{ "dependencies": { "express": "^4.18.2", "zod": "^3.22.0" }}ติดตั้ง dependency ใหม่:
npm install expressdevDependencies
หัวข้อที่มีชื่อว่า “devDependencies”devDependencies คือ package ที่ต้องใช้เฉพาะระหว่าง การพัฒนา เช่น test runner, linter, bundler หรือ type definitions ไม่ถูก install เมื่อผู้ใช้ติดตั้ง package ของคุณ และไม่ถูก install ใน environment production เมื่อรัน npm ci --omit=dev
{ "devDependencies": { "vitest": "^1.2.0", "eslint": "^8.57.0", "@types/node": "^20.11.0" }}ติดตั้ง dev dependency:
npm install --save-dev vitestpeerDependencies
หัวข้อที่มีชื่อว่า “peerDependencies”peerDependencies ระบุ package ที่ ผู้ใช้ต้องจัดหาเอง วิธีนี้ป้องกันไม่ให้มี instance ซ้ำซ้อนของ library ที่ใช้ state ร่วมกัน เช่น React หรือ webpack
{ "peerDependencies": { "react": ">=17.0.0" }}npm 7 ขึ้นไปจะ install peer dependencies โดยอัตโนมัติ แต่จะแจ้งเตือนหาก version ไม่ตรงกัน
Lockfiles
หัวข้อที่มีชื่อว่า “Lockfiles”npm สร้าง package-lock.json เมื่อรัน npm install ครั้งแรก lockfile นี้ระบุ version ที่แน่นอนของทุก dependency (รวมถึง dependency ลำดับที่สอง) เพื่อให้ทุกคนในทีมและ CI ได้รับ dependency tree ที่เหมือนกันทุกประการ
{ "name": "my-app", "lockfileVersion": 3, "requires": true, "packages": { "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", "integrity": "sha512-..." } }}npm install เทียบกับ npm ci
หัวข้อที่มีชื่อว่า “npm install เทียบกับ npm ci”# npm install — อัปเดต lockfile หากไม่ตรงกับ package.jsonnpm install
# npm ci — ใช้ lockfile ทุกอย่างตามตัวอักษร; ล้ม node_modules เก่าก่อนเสมอ# จะ fail หาก package-lock.json ไม่ sync กับ package.jsonnpm ciใช้ npm install ระหว่างพัฒนาเมื่อต้องการอัปเดต dependency ใช้ npm ci ใน CI/CD และ Docker build เพื่อให้ได้ reproducible install ที่เร็วและปลอดภัย