package.json มีอะไรมากกว่าที่คุณคิด

package.json มีอะไรมากกว่าที่คุณคิด
16/06/20   |   241   |  

ชาว Node.js น่าจะคุ้นเคยกับไฟล์ชื่อ package.json กันมาบ้างแล้ว

เคยสงสัยกันบ้างรึเปล่านะ ว่าแต่ละบรรทัดของไฟล์นี้ต้องการบอกอะไรบ้าง

มีอะไรที่นอกเหนือจาก name, version, dependencies รึเปล่า ?

วันนี้เราจะมาเล่าให้ฟัง !

เข้าใจ package.json เข้าใจภาพรวม package

 

Keyword

ใช้สำหรับบอกว่า package ของเรานั้น เกี่ยวข้องกับอะไรบ้าง โดยจะเป็นคีย์เวิร์ดสั้นๆ มีประโยชน์ที่จะใช้ในการค้นหา package ใน package manager

ตัวอย่างข้างล่างคือ keyword ของ moment.js

{
  "keywords": ["moment", "date", "time", "parse", "format", "validate", "i18n", "l10n", "ender"]
}

ซึ่งเมื่อเราไปค้นหาคีย์เวิร์ดคำว่า date ใน npm.js.com ก็จะพบเจอ moment.js ดังนี้

 

 

Homepage

Homepage คือ url ที่จะใช้บอกว่าหน้าเว็บหลัก หรือหน้าเว็บเอกสารรายละเอียดเกี่ยวกับ package นี้อยู่ที่ไหน ดังเช่นตัวอย่างเดิมคือ homepage ของ moment.js จะเป็นลักษณะดังนี้

{
  "homepage": "http://momentjs.com/"
}

 

Bugs

การพัฒนา package อะไรซักอย่างให้เสถียร ไม่มีบัค เป็นเรื่องยากมาก แต่ไม่ใช่ว่าจะทำไม่ได้...รึเปล่านะ? ฮ่าๆๆ อย่างน้อย ๆ สิ่งที่เราชาว Developer ควรจะทำคือทำให้บัคมันน้อยยยยยยยที่สุด ดังนั้นเราควรจะมีที่ไหนซักที่ที่จะใช้สำหรับ report bugs ต่าง ๆ ที่ผู้ใช้งานเจอ และเราก็ควรจะบอกเค้าด้วยว่าที่ที่นั้น "คือที่ไหน"

{
  "bugs": {
    "url": "https://github.com/moment/moment/issues"
  },
}

 

Peer Dependencies

หลาย ๆ คนน่าจะเคยเห็น dependencies และ dev-dependencies กันมาบ้างแล้ว แต่น่าจะมีน้อยคนที่เคยเห็น peer-dependencies (ผู้เขียนด้วยคนนึงล่ะ ตอนเห็นครั้งแรกก็แอบตื่นเต้นอยู่เหมือนกัน) ซึ่งไอตัว peer-dependencies เนี่ย จะใช้ในการบอกว่า package ของเรานั้นสามารถเข้ากันได้กับ package อื่น ๆ ได้ที่ version อะไร

ยกตัวอย่างเช่นเราทำ package สำหรับ react v.16 ขึ้นไป ซึ่งตัว package นั้น ผ่านการทดสอบกับ react v.15 แล้ว ผลปรากฎว่ามันอยู่ด้วยกันไม่ได้เลย เราก็ควรที่จะบอกผู้ใช้งานหน่อยนะว่าเราต้องการ react v.16 นะ นาย(react v.15) มันเก่าเกินไปสำหรับเราแล้วล่ะ เราคงเข้ากันไม่ได้

{
  "peerDependencies": {
    "react": "^16.6.1"
  }
}

 

Engines

เช่นเดียวกับกรณีของ peer-dependencies ซึ่งจะใช้สำหรับตรวจสอบว่า package ของเราสามารถเข้ากันได้กับ package อื่น ๆ ที่ติดตั้งไปแล้วหรือไม่

ตัว engines จะใช้สำหรับตรวจสอบการเข้ากันได้ "ในระดับ System" เช่น version ของ Node.js, version ของ yarn 

{
  "engines": {
    "node": ">=4.4.7 <7.0.0",
    "yarn": "^0.14.0"
  }
}

 

สิ่งต่าง ๆ ที่ได้พูดถึงด้านบน ไม่ใช่ทั้งหมดของ package.json และยังมีรายละเอียดยิบย่อยอีกมากมาย ซึ่งถ้าพูดในตอนนี้ก็เกรงว่าบล็อกน่าจะยาวจนแทบจะทำเป็นเอกสารได้เลย ดังนั้นถ้ามีเวลา ก็จะพยายามมาอัพเดทใน Chapter ต่อ ๆ ไปเรื่อย ๆ นะคะ

 

ปิดท้ายด้วยคำคมสวย ๆ 

 

สิ่งหนึ่งที่จะทำให้ Open source ของเราเติบโตเจริญงอกงามได้อย่างรวดเร็วมาก ๆ คือการสร้าง Community ยิ่งเรามีรายละเอียดข้อมูลเกี่ยวกับ Package เรามากเท่าไหร่ คนก็จะยิ่งเข้าใจและเข้าถึง Package ของเราได้เท่านั้น ดังนั้นใส่ข้อมูลอะไรได้ก็ใส่ไปเถอะ ! 

tags : node.js package npm



ติดตามข่าวสารและเรื่องราวดีๆ ทาง Email