Estoy tratando de configurar un monorepo con 3 servicios que comparten algún código de biblioteca.
Esta es la situación actual:
repo: web pdf/ package.json reference to shared-ts using github url tsconfig.json frontend/ package.json reference to shared-ts using github url tsconfig.json repo: mobile (react-native) package.json reference to shared-ts using github url tsconfig.json repo: shared-ts package.json tsconfig.json Esto funciona, pero es una molestia comprometerse con shared-ts , compilar, cambiar el hash en package.json y confirmar nuevamente.
Esto es lo que me gustaría lograr:
repo: monorepo pdf/ package.json reference to ../shared-ts tsconfig.json frontend/ package.json reference to ../shared-ts tsconfig.json mobile/ package.json reference to ../shared-ts tsconfig.json shared-ts/ package.json tsconfig.jsonHasta ahora he probado:
"shared-ts": "../shared-ts" en package.json pero copia shared-ts en node_modules de cada paquete, así que tengo que volver a ejecutar yarn cada vez que hago un cambioyarn link en postinstall : error TS2307: Cannot find module 'shared-ts' or its corresponding type declarations.postinstall con ln -s ../shared-ts/ node_modules/shared-ts/ pero parece que TypeScript no encuentra el módulonpm link en postinstall parece ser el más prometedor, pero es muy lento y tengo problemas para ejecutarlo en CI debido a algunos problemas de permisos.¿Hay una buena manera de hacer esto? ¿Alguna idea sobre otras cosas que podría probar?
puedes usar el espacio de trabajo y Lerna
yarn workspace & lerna ├── README.md ├── lerna.json ├── package.json ├── packages │ ├── pdf │ │ ├── package.json /* "shared-ts": "^1.0.0" */ │ │ └── src │ ├── frontend │ │ ├── package.json │ │ └── src │ ├── mobile │ │ ├── package.json │ │ └── src │ ├── shared-ts │ │ ├── package.json │ │ └── src ├── tsconfig.json └── yarn.lockaquí hay un repositorio de ejemplo
aquí puede ver que x-cli se está compartiendo x-core
puede usar el paquete mtsl que nos permite crear enlaces simbólicos tangibles. puede instalar este paquete globalmente
npm install -g mtslentonces solo necesita comenzar a separar estos tres comandos en la terminal.
mtsl startwithoutadd -s path_of_project/packages/shared-ts -d path_of_project/packages/pdf/node_modules/shared-ts mtsl startwithoutadd -s path_of_project/packages/shared-ts -d path_of_project/packages/frontend/node_modules/shared-ts mtsl startwithoutadd -s path_of_project/packages/shared-ts -d path_of_project/packages/mobile/node_modules/shared-ts Tenga en cuenta que no detenga a este observador de tres. después de la prueba, puede hacer un solo comando desde el script package.json
usando yarn workspace & lerna
aquí hay un ejemplo de plantilla monorepo
He hecho las cosas que te interesan en un proyecto reciente. Los resultados deseados se pueden lograr con monorepo utilizando lerna y el espacio de trabajo de hilo. Para más detalles, por favor vaya a este enlace
Con lo anterior, estaremos creando un paquete de tipos. En otros paquetes, solo importaremos tipos de paquetes como los siguientes:
import { Post } from "@types";Las cosas son mucho más fáciles de esta manera que vincular paquetes nosotros mismos.