reactjs - چگونه میتوان در یک مونورپو تایپاسکریپت با Lerna و Yarn Workspaces قابلیت بارگذاری مجدد سریع را فعال کرد؟


ما از یک مونو ریپو کامل تایپاسکریپت با این ساختار استفاده میکنیم:

project
| - packages
    | - common
    | - appsCommon
    | - Next.js-App
    | - React-Native-App
    | - Google-Cloud-Functions

تا کنون common و appsCommon از TypeScript به ES6 در یک پوشه lib کامپایل شدهاند.

tsconfig.json بستههای مشترک به این شکل است:

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "module": "commonjs",
    "outDir": "lib",
    "strict": true,
    "target": "es6",
    "jsx": "react"
  },
  "compileOnSave": true,
  "include": ["src"]
}

فایل packages.json بستههای مشترک به این شکل است:

{
  "name": "@project/common",
  "version": "0.0.10",
  "main": "lib/index.js", 
  "types": "lib/index.d.ts", 
  "files": [
    "lib/**/*" 
  ],
  ...
}

این برای Common لازم است، که برای استفاده در توابع ابری به npm منتشر شده است، اما برای appsCommon لازم نیست، که مستقیماً توسط برنامههای Next.js و React Native استفاده میشود.

بارگذاری مجدد گرم همچنین باید برای اجزای رایج در پروژه کار کند.

در حال حاضر فایل global packages.json به این صورت است:

{
  "name": "project",
  "private": true,
  "workspaces": {
    "packages": [
      "packages/*"
    ],
    "nohoist": [
      "**react**",
      "**react-native**",
      ...
    ]
  },
  ...
}

در حال حاضر فایل lerna.json به این صورت است:

{
  "packages": [
    "packages/*"
  ],
  "npmClient": "yarn",
  "version": "0.0.10",
  "useWorkspaces": true,

حدس میزنم فقط موضوع تغییر lib به src در package.json عمومی نیست، وقتی این کار را انجام میدهم، ماژولها توسط VS Code خط کشی میشوند: "یافت نشد". همچنین، میدانم که توابع ابری میتوانند از تایپاسکریپت خام استفاده کنند اما نمیدانم آیا ممکن است بستههای تایپاسکریپت غیرکامپایل شده را فراخوانی کرد یا نه.

پاسخ شماره ۱

شما میتوانید فرایند کامپایل ماژولهای خود را با استفاده از ابزار sync-monorepo-packages سازماندهی کنید، زیرا این ابزار دارای قابلیت کشف خودکار بستهها از طریق learna.json است، که میبینم شما قبلاً از آن استفاده میکنید.

مربوط به هدف استفاده از بارگذاری مجدد داغ، من این مشکل در گیتهاب را پیدا کردهام که در آن تأکید شده است بارگذاری مجدد داغ برای محیط تولید ایدهآل نیست، اما برای مقاصد توسعه بسیار مفید است.