Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

78
Visualizações
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 Respostas
Responde à pergunta

0

usando yarn workspace & lerna

aquí hay un ejemplo de plantilla monorepo

over 4 years ago · Santiago Trujillo Relatório

0

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.

over 4 years ago · Santiago Trujillo Relatório

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda