Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

การกำหนด Dependencies ใน composer.json

การกำหนด Dependencies ใน composer.json

ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับโครงสร้างพื้นฐานของไฟล์ composer.json และองค์ประกอบสำคัญต่างๆ เช่น name, description, require และ autoload ในบทนี้ เราจะเจาะลึกถึงการกำหนด dependencies ในส่วนของ require ซึ่งเป็นส่วนที่บอก Composer ว่าโปรเจกต์ของเราต้องการ package อะไรบ้าง และเวอร์ชันไหน

`require` คืออะไร?

require คือส่วนหนึ่งของไฟล์ composer.json ที่ใช้ระบุ dependencies หรือ package ที่โปรเจกต์ของเราต้องการใช้งาน เปรียบเสมือนรายการส่วนผสมที่จำเป็นสำหรับทำอาหาร หากไม่มีส่วนผสมเหล่านี้ โปรเจกต์ของเราก็อาจทำงานไม่ได้ตามที่คาดหวัง

dependencies เหล่านี้มักจะเป็น library หรือ package ที่มี code ที่ช่วยให้เราทำงานบางอย่างได้ง่ายขึ้น เช่น การจัดการฐานข้อมูล, การสร้าง API, หรือการจัดการ user authentication

โครงสร้างของ `require`

require เป็น JSON object ที่มี key เป็นชื่อของ package และ value เป็นเวอร์ชันของ package นั้นๆ ตัวอย่าง:

{
  "require": {
    "monolog/monolog": "1.0.*"
  }
}

จากตัวอย่างข้างต้น เรากำลังบอก Composer ว่าโปรเจกต์ของเราต้องการ package ชื่อ monolog/monolog เวอร์ชัน 1.0.* เราจะอธิบายเรื่องเวอร์ชันอย่างละเอียดในหัวข้อถัดไป

ชื่อ Package (Package Name)

ชื่อ package ใน Composer มีรูปแบบ vendor/package โดยที่:

  • vendor คือชื่อของผู้พัฒนาหรือองค์กรที่สร้าง package นั้นๆ
  • package คือชื่อของ package นั้นๆ

ตัวอย่างเช่น monolog/monolog หมายถึง package ชื่อ monolog ที่พัฒนาโดย monolog (ซึ่งเป็นชื่อของ vendor หรือองค์กร)

เวอร์ชันของ Package (Package Version)

การกำหนดเวอร์ชันของ package เป็นสิ่งสำคัญ เพื่อให้ Composer ทราบว่าเราต้องการ package เวอร์ชันไหนมาใช้งาน การกำหนดเวอร์ชันที่ถูกต้องจะช่วยให้โปรเจกต์ของเราทำงานได้อย่างราบรื่นและหลีกเลี่ยงปัญหาความเข้ากันไม่ได้ (compatibility issues)

Composer รองรับการกำหนดเวอร์ชันที่หลากหลาย ซึ่งเราจะเรียกสิ่งเหล่านี้ว่า "constraints" หรือข้อจำกัดในการเลือกเวอร์ชัน

Version Constraints (ข้อจำกัดของเวอร์ชัน)

Version constraints ช่วยให้เรามีความยืดหยุ่นในการกำหนดเวอร์ชันของ package ที่ต้องการใช้งาน Composer จะพยายามหาเวอร์ชันที่ตรงตาม constraints ที่เรากำหนดไว้ หากไม่พบเวอร์ชันที่ตรงตามเงื่อนไข Composer จะแจ้ง error ให้เราทราบ

ต่อไปนี้เป็นตัวอย่างของ version constraints ที่พบบ่อย:

  1. เวอร์ชันที่แน่นอน (Exact Version):
  2. ระบุเวอร์ชันที่ต้องการใช้งานอย่างเจาะจง เช่น "1.0.0" หมายถึงต้องการ package เวอร์ชัน 1.0.0 เท่านั้น

        {
          "require": {
            "monolog/monolog": "1.0.0"
          }
        }
        
  3. ช่วงของเวอร์ชัน (Version Range):
  4. ระบุช่วงของเวอร์ชันที่ต้องการใช้งาน เช่น ">=1.0.0 <2.0.0" หมายถึงต้องการ package เวอร์ชัน 1.0.0 ขึ้นไป แต่ไม่เกิน 2.0.0

        {
          "require": {
            "monolog/monolog": ">=1.0.0 <2.0.0"
          }
        }
        
  5. Wildcard Version:
  6. ใช้เครื่องหมาย * เพื่อระบุว่าต้องการเวอร์ชันใดๆ ก็ได้ในระดับ minor หรือ patch เช่น "1.0.*" หมายถึงต้องการ package เวอร์ชัน 1.0.x (x เป็นเลขอะไรก็ได้)

        {
          "require": {
            "monolog/monolog": "1.0.*"
          }
        }
        
  7. Tilde Operator (~):
  8. ใช้เครื่องหมาย ~ เพื่อระบุว่าต้องการเวอร์ชันที่เข้ากันได้กับเวอร์ชันที่ระบุ เช่น "~1.0" หมายถึงต้องการ package เวอร์ชัน 1.0 ขึ้นไป แต่ไม่เกิน 2.0 (ไม่รวม 2.0) หรือ "~1.0.0" หมายถึงต้องการ package เวอร์ชัน 1.0.0 ขึ้นไป แต่ไม่เกิน 1.1 (ไม่รวม 1.1)

        {
          "require": {
            "monolog/monolog": "~1.0"
          }
        }
        
  9. Caret Operator (^):
  10. ใช้เครื่องหมาย ^ เพื่อระบุว่าต้องการเวอร์ชันที่เข้ากันได้กับเวอร์ชันที่ระบุ (แนะนำให้ใช้) เช่น "^1.0" หมายถึงต้องการ package เวอร์ชัน 1.0 ขึ้นไป แต่ไม่เกิน 2.0 (ไม่รวม 2.0) หรือ "^1.0.0" หมายถึงต้องการ package เวอร์ชัน 1.0.0 ขึ้นไป แต่ไม่เกิน 2.0 (ไม่รวม 2.0)

        {
          "require": {
            "monolog/monolog": "^1.0"
          }
        }
        

    Caret operator (^): แนะนำให้ใช้เพราะจะอัพเดท package เป็นเวอร์ชันล่าสุดที่เข้ากันได้กับเวอร์ชันหลัก (major version) ที่ระบุไว้

ตัวอย่างการกำหนด Dependencies หลาย Package

เราสามารถกำหนด dependencies หลาย package ในไฟล์ composer.json ได้โดยเพิ่ม key-value pair ในส่วนของ require ตัวอย่าง:

{
  "require": {
    "monolog/monolog": "^1.0",
    "guzzlehttp/guzzle": "^7.0"
  }
}

จากตัวอย่างข้างต้น เรากำลังบอก Composer ว่าโปรเจกต์ของเราต้องการ package monolog/monolog เวอร์ชัน 1.0 ขึ้นไป และ guzzlehttp/guzzle เวอร์ชัน 7.0 ขึ้นไป

ข้อควรจำในการกำหนด Dependencies

  • เลือกเวอร์ชันที่เหมาะสม: พิจารณาความเข้ากันได้ของ package กับโปรเจกต์ของเรา และเลือกเวอร์ชันที่เหมาะสมที่สุด
  • ใช้ version constraints ที่เหมาะสม: กำหนด version constraints ที่ยืดหยุ่นพอสมควร เพื่อให้ Composer สามารถอัพเดท package ได้โดยอัตโนมัติ แต่ก็ต้องระวังไม่ให้เวอร์ชันที่อัพเดทมาใหม่ทำให้โปรเจกต์ของเราเสียหาย
  • ตรวจสอบ dependencies อย่างสม่ำเสมอ: ตรวจสอบ dependencies ของโปรเจกต์ของเราอย่างสม่ำเสมอ เพื่อให้แน่ใจว่าไม่มีช่องโหว่ด้านความปลอดภัย หรือปัญหาความเข้ากันไม่ได้

สรุป

การกำหนด dependencies ในไฟล์ composer.json เป็นขั้นตอนสำคัญในการจัดการ package ในโปรเจกต์ PHP การระบุ package ที่ต้องการใช้งานและเวอร์ชันที่เหมาะสม จะช่วยให้โปรเจกต์ของเราทำงานได้อย่างราบรื่นและมีประสิทธิภาพ ในบทถัดไป เราจะเรียนรู้วิธีการติดตั้ง dependencies ที่เราได้กำหนดไว้ในไฟล์ composer.json ด้วยคำสั่ง composer install

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service