Как включить горячую перезагрузку в Typescript monorepo с рабочими пространствами Lerna и Yarn?

#reactjs #typescript #google-cloud-functions #lerna #monorepo

#reactjs #typescript #google-cloud-функции #lerna #monorepo

Вопрос:

Мы используем полное TypeScript mono repo с такой структурой:

 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"]
}
  

Пакеты.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.

Горячая перезагрузка также должна работать для common в рамках проекта.

В настоящее время глобальные пакеты.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 в общем пакете.json, когда я делаю это, модули подчеркиваются VS Code: «не найдено». Кроме того, я знаю, что облачные функции могут использовать необработанный typescript, но я не знаю, возможно ли вызывать некомпилированные пакеты typescript.

Ответ №1:

Вы можете организовать компиляцию своих модулей с помощью утилиты sync-monorepo-packages, поскольку у нее есть функция автоматического обнаружения пакетов через learna.json, которую, я вижу, вы уже используете.

В связи с целью использования горячей перезагрузки я обнаружил эту проблему с github, где подчеркивается, что горячая перезагрузка не идеальна для производственной среды, но она очень полезна для целей разработки.