Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

251
Vistas
Compartir una biblioteca mecanografiada en un monorepo

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.json

Hasta ahora he probado:

  • Referencias de proyectos de TypeScript, pero parece que no hay forma de tener dependencias en el proyecto shared-ts
  • "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 cambio
  • yarn link en postinstall : error TS2307: Cannot find module 'shared-ts' or its corresponding type declarations.
  • creando un enlace simbólico directamente en postinstall con ln -s ../shared-ts/ node_modules/shared-ts/ pero parece que TypeScript no encuentra el módulo
  • npm 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?

over 4 years ago · Santiago Trujillo
5 Respuestas
Responde la pregunta

0

usando yarn workspace & lerna

aquí hay un ejemplo de plantilla monorepo

over 4 years ago · Santiago Trujillo Denunciar

0

He hecho las cosas que te interesan en un proyecto reciente. Los resultados deseados se pueden lograr con monorepo usando 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.

over 4 years ago · Santiago Trujillo Denunciar

0

Solución 1:

con Lerna

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.lock

aquí hay un repositorio de ejemplo

aquí puede ver que x-cli se está compartiendo x-core

Solución 2:

sin Lerna

puede usar el paquete mtsl que nos permite crear enlaces simbólicos tangibles. puede instalar este paquete globalmente

 npm install -g mtsl

entonces 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

over 4 years ago · Santiago Trujillo Denunciar

0

Su caso de uso se puede manejar utilizando los espacios de trabajo de npm7 . En resumen, su nueva estructura monorepo debería verse a continuación:

 repo: monorepo package.json // <- here you define the workspaces 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.json

Debe enumerar los espacios de trabajo en el package.json , que podría verse como a continuación:

 { "name": "awesome-monorepo", "workspaces": [ "pdf", "frontend", "mobile", "shared-ts" ] }

Después de hacer eso, en cualquier lugar del monorepo en el que decida usar shared-ts , puede agregarlo a dependencies o devDependencies simplemente haciendo referencia al número de versión en lugar de la ruta relativa.

Todos los módulos de nodo, incluidos los espacios de trabajo, se elevan a la raíz node_modules , por lo que la resolución del módulo debería funcionar sin fricción.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar NX para mantener sus repositorios, en los que sus repositorios web y mobile serán sus aplicaciones, y los shared-ts serán una librería de modo que la web y el mobile dependan de shared-ts .

Tiene un paquete.json común o un paquete.json separado para cada repositorio individualmente. NX proporciona dependencyGraph y las funciones affected , en las que si cambia las bibliotecas comunes, determina qué módulos/aplicaciones compilar sin tener que compilar todo.

Su estructura de código se vería así:

 apps: web: src package.json mobile: src package.json libs: shared-ts: src package.json workspace.json

Probablemente sea mejor buscar los documentos oficiales para obtener la mejor configuración y opciones, pero creo que proporciona lo que está buscando.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda