เริ่มต้นใช้งาน Lerna สำหรับจัดการ Monorepo ในโปรเจกต์

Sept. 1, 2024 · boychawin

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, การจัดการเวอร์ชัน, และการรันสคริปต์ให้เป็นไปอย่างมีระบบ เหมาะสมอย่างยิ่งสำหรับโปรเจกต์ที่มีหลายโมดูลหรือแพ็กเกจย่อยที่ต้องการการพัฒนาร่วมกันภายใต้โปรเจกต์เดียวกัน