avatar
thiti.dev
วงแหวนเว็บ
Search
Tags
My CV
Contact
Support me
Peer dependencies ใน npm
30 Sep 2021

สวัสดีครับ ในบทความนี้จะเกี่ยวกับ Peer dependencies ใน npm ครับ

Peer dependencies คืออะไร

ในบางครั้งถ้าเราต้องการจะสร้าง Library A และ Plugin B ที่ใช้งานร่วมกันตัวอย่างเช่น

import A from 'A'
import B from 'B'

A.addPlugin(new B())

A.doSomeThing()

จากตัวอย่างด้านบน หมายความว่า Plugin B จะต้อง Implement ให้สามารถใช้งานใน Library A ได้

ปัญหาคือ ถ้า Library A มีการเปลี่ยน version และมีการเปลี่ยนแปลงอะไรบางอย่างที่ทําให้ Plugin B ไม่สามารถใช้งานได้อีกต่อไป จึงทําให้เกิดปัญหาขึ้นมา

Peer dependencies จะมาช่วยแก้ปัญหานี้คือ จะช่วยบอก npm ว่า Plugin B จะสามารถใช้งานกับ Library A version อะไรได้บ้าง

ตัวอย่างการกําหนด peerDependencies ให้กับ Plugin B

{
  "name": "B",
  "version": "1.0.0",
  "peerDependencies": {
    "A": "2.x"
  }
}

จากตัวอย่างด้านบน หมายความว่า Plugin B v1.0.0 จะสามารถใช้งานร่วมกับ Library A v2.x ได้ แต่ใน Library A version อื่นๆนอกเหนือจากนี้ อาจจะไม่สามารถทํางานร่วมกันได้

ใน npm version 3-6 จะขึ้น Warning กรณีที่ version ของ package ใน peerDependencies ไม่ตรงกันกับ package ที่อยู่ใน node_module

แต่ ใน npm version 7 จะทําการ Install package ใน peerDependencies ให้โดยอัตโนมัติ ทําให้เกิด Conflic และ Error ขึ้นกรณีที่ ใน node_module มี package version อื่น อยู่แล้ว ซึ่งเราสามารถแก้ปัญหาได้โดยใช้ --legacy-peer-deps ตอนใช้คําสั่ง npm install เพื่อบอก npm ว่าไม่ต้อง Install ให้ แค่แสดง Warning ขึ้นมาเฉยๆพอ เหมือนกับ npm version 3-6

$ npm install --legacy-peer-deps <your package>
thiti.dev © 2021 Thiti Yamsung