#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, где подчеркивается, что горячая перезагрузка не идеальна для производственной среды, но она очень полезна для целей разработки.