Lerna เป็นเครื่องมือที่ใช้ในการจัดการโปรเจกต์ที่มีหลายแพ็กเกจหรือหลายโมดูลภายในโปรเจกต์เดียวกัน ซึ่งเรียกว่า Monorepo การจัดการหลายแพ็กเกจภายใต้โปรเจกต์เดียวกันจะมีความซับซ้อน แต่ Lerna ช่วยลดความซับซ้อนนี้ และเพื่อช่วยให้การทำงานร่วมกันใน Monorepo มีความรวดเร็วและเป็นระบบมากขึ้น
การติดตั้งและตั้งค่า Lerna
โครงสร้างโปรเจ็กต์
Lerna จะช่วยจัดการแพ็กเกจภายในโฟลเดอร์ packages โดยแต่ละแพ็กเกจจะอยู่ในโฟลเดอร์ย่อยภายใน packages ตัวอย่างเช่น
my-monorepo/
├── lerna.json
├── package.json
└── packages/
├── client/
└── service/
ก่อนเริ่มต้นใช้งาน Lerna ในโปรเจกต์ จำเป็นต้องติดตั้ง Lerna ก่อน ซึ่งสามารถทำได้โดยการติดตั้งผ่าน yarn ดังนี้
yarn add lerna --dev
จากนั้น ให้ทำการตั้งค่า Lerna โดยสร้างไฟล์ lerna.json และตั้งค่าพื้นฐาน ดังนี้
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "0.0.0",
"packages": [
"packages/*"
],
"npmClient": "yarn"
}
ในไฟล์ package.json ของโปรเจ็กต์หลัก คุณสามารถระบุ dependencies และสคริปต์ต่าง ๆ ที่ต้องการใช้ร่วมกับ Lerna ได้ เช่น
{
"name": "my-monorepo",
"version": "1.0.0",
"main": "index.js",
"repository": "....git",
"author": "boy<[email protected]>",
"license": "MIT",
"devDependencies": {
"lerna": "^8.1.8"
},
"scripts": {
"start:client": "lerna run --scope client start",
"start:service": "lerna run --scope service start",
"build:client": "lerna run --scope client build",
"lerna-clean": "lerna clean -y",
"lerna-bootstrap": "lerna bootstrap",
"lerna-publish": "lerna publish"
},
"private": true,
"workspaces": [
"packages/*"
]
}
การใช้งานคำสั่ง Lerna
Lerna มีคำสั่งหลายอย่างที่ช่วยให้การทำงานใน Monorepo มีประสิทธิภาพมากขึ้น คำสั่งที่ใช้บ่อย ได้แก่
-
lerna run: รันคำสั่งที่ระบุใน package.json ของแพ็กเกจที่เลือก ตัวอย่าง: lerna run --scope client start
-
lerna clean: ลบ dependencies ที่ติดตั้งในแต่ละแพ็กเกจ ตัวอย่าง: lerna clean -y
-
lerna bootstrap: ติดตั้ง dependencies ทั้งหมดและลิงก์แพ็กเกจใน Monorepo ตัวอย่าง: lerna bootstrap
-
lerna publish: จัดการการเพิ่มเวอร์ชันและการเผยแพร่แพ็กเกจทั้งหมดใน Monorepo ไปยัง npm หรือที่อื่นๆ ตัวอย่าง: lerna publish
สรุป
Lerna เป็นเครื่องมือที่ช่วยให้การจัดการ Monorepo ให้เป็นเรื่องง่ายขึ้น โดยการรวมกระบวนการต่าง ๆ เช่น การติดตั้ง dependencies, การจัดการเวอร์ชัน, และการรันสคริปต์ให้เป็นไปอย่างมีระบบ เหมาะสมอย่างยิ่งสำหรับโปรเจกต์ที่มีหลายโมดูลหรือแพ็กเกจย่อยที่ต้องการการพัฒนาร่วมกันภายใต้โปรเจกต์เดียวกัน