0Pricing
TypeScript Academy · บทเรียน

เวิร์กสเปซ pnpm กับ TypeScript

กำหนดค่าโมโนรีโปด้วย pnpm และ tsconfig ที่ใช้ร่วมกัน

เวิร์กสเปซ pnpm กับ TypeScript เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

pnpm เวิร์กสเปซคืออะไร

pnpm เวิร์กสเปซช่วยให้คุณจัดการหลายแพ็กเกจในรีโพเดียว โดยใช้โครงสร้าง node_modules ร่วมกัน ลดการใช้พื้นที่ดิสก์ และเปิดให้แพ็กเกจต่าง ๆ นำเข้าข้ามกันได้

# pnpm-workspace.yaml
packages:
  - "packages/*"
  - "apps/*"

การสร้างโครงสร้างเวิร์กสเปซ

โมโนรีโป pnpm โดยทั่วไปมี packages/ สำหรับไลบรารีที่ใช้ร่วมกัน และ apps/ สำหรับแอปพลิเคชันที่นำไปใช้งานได้

monorepo/
├── pnpm-workspace.yaml
├── package.json          # root
├── packages/
│   ├── core/             # shared logic
│   └── ui/               # shared components
└── apps/
    └── web/              # Next.js app

tsconfig.json ระดับราก

tsconfig ระดับรากกำหนดตัวเลือกพื้นฐานและอ้างอิงแพ็กเกจเวิร์กสเปซทั้งหมด

{
  "compilerOptions": {
    "strict": true,
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "bundler"
  },
  "references": [
    { "path": "packages/core" },
    { "path": "packages/ui" },
    { "path": "apps/web" }
  ]
}

tsconfig ระดับแพ็กเกจ

แต่ละแพ็กเกจสืบทอดการกำหนดค่าจากระดับราก และตั้งค่า composite กับ outDir ของตนเอง

// packages/core/tsconfig.json
{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "composite": true,
    "outDir": "./dist",
    "rootDir": "./src"
  }
}

การติดตั้งการพึ่งพาข้ามแพ็กเกจ

ใช้ pnpm add ร่วมกับโพรโทคอลเวิร์กสเปซเพื่อเชื่อมแพ็กเกจภายในโมโนรีโป

# Add @myapp/core to apps/web
pnpm add @myapp/core --workspace --filter apps/web

# package.json entry:
# "@myapp/core": "workspace:*"

การแก้ไขเส้นทางของ TypeScript

เพิ่มนามแฝง paths ใน tsconfig ระดับราก เพื่อให้ TypeScript แก้ไขแพ็กเกจเวิร์กสเปซไปยังต้นฉบับระหว่างการพัฒนา

{
  "compilerOptions": {
    "paths": {
      "@myapp/core": ["./packages/core/src/index.ts"],
      "@myapp/ui": ["./packages/ui/src/index.ts"]
    }
  }
}

การสร้างแพ็กเกจทั้งหมด

ใช้ tsc --build จากระดับรากเพื่อสร้างแพ็กเกจแบบผสมทั้งหมดตามลำดับการพึ่งพา

# Build all
tsc --build

# Or with pnpm recursive script:
pnpm -r build

การเรียกใช้สคริปต์ข้ามแพ็กเกจ

pnpm -r (แบบเวียนทำซ้ำ) หรือ --filter จะเรียกใช้สคริปต์ในแพ็กเกจที่ตรงกันทั้งหมด

# Run tests in all packages
pnpm -r test

# Run only in packages/core
pnpm --filter @myapp/core test

การกำหนดค่า ESLint และ Prettier ร่วมกัน

เก็บการกำหนดค่าการตรวจรูปแบบโค้ดไว้ในแพ็กเกจร่วม และให้แต่ละแพ็กเกจสืบทอดการกำหนดค่าเหล่านั้น เพื่อให้รูปแบบโค้ดในโมโนรีโอสอดคล้องกัน

// packages/eslint-config/index.js
module.exports = { extends: ["airbnb-typescript"], ... };

การผสานรวมกับ Turborepo

เพิ่ม Turborepo เพื่อแคชและทำงานสร้าง ทดสอบ และตรวจรูปแบบโค้ดแบบขนาน โดยใช้กราฟเวิร์กสเปซของ pnpm เพื่อจัดลำดับการพึ่งพา

npx create-turbo@latest
# or add to existing monorepo:
pnpm add turbo -w

ทบทวน: pnpm เวิร์กสเปซกับ TypeScript

pnpm เวิร์กสเปซร่วมกับการอ้างอิงโครงการของ TypeScript สร้างการตั้งค่าโมโนรีโปที่ทรงพลัง ได้แก่ node_modules ร่วมกัน การนำเข้าข้ามแพ็กเกจผ่าน workspace:* และการสร้างที่รวดเร็วด้วย tsc --build

ตรวจสอบอย่างรวดเร็ว

ไฟล์ใดกำหนดว่าไดเรกทอรีใดเป็นแพ็กเกจในเวิร์กสเปซของ pnpm

สิ่งที่ได้เรียนรู้

pnpm เวิร์กสเปซร่วมกับการอ้างอิงโครงการของ TypeScript ช่วยให้คุณมีโมโนรีโปที่มีประสิทธิภาพ พร้อม node_modules ร่วมกัน การเชื่อมโยงข้ามแพ็กเกจด้วยโพรโทคอลเวิร์กสเปซ และการสร้างแบบเพิ่มทีละส่วน เพิ่ม Turborepo เพื่อใช้แคชและทำงานแบบขนาน

คำถามที่พบบ่อย

บทเรียน “เวิร์กสเปซ pnpm กับ TypeScript” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เวิร์กสเปซ pnpm กับ TypeScript” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เวิร์กสเปซ pnpm กับ TypeScript”

กำหนดค่าโมโนรีโปด้วย pnpm และ tsconfig ที่ใช้ร่วมกัน คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “เวิร์กสเปซ pnpm กับ TypeScript” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. อธิบายการอ้างอิงโครงการ TypeScript
  2. เวิร์กสเปซ pnpm กับ TypeScript
  3. กลยุทธ์แพ็กเกจชนิดที่ใช้ร่วมกัน
  4. การบิลด์แบบเพิ่มทีละส่วนและแคชในโมโนรีโป
← กลับไปที่ TypeScript Academy