Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

77
Views
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 answers
Answer question

0

usando yarn workspace & lerna

aquí hay un ejemplo de plantilla monorepo

over 4 years ago · Santiago Trujillo Report

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!