Ir al contenido

Sección Librerías

La sección Librerías te permite desarrollar una librería compartida en local y verla en los micros que la consumen, sin publicarla en un registro. Aseptic construye su artefacto y lo enlaza a cada consumidor. Soporta librerías npm, Maven, Gradle, Python, Go y .NET.

Es una sección con patrón lista + detalle (como Micros): en el lateral, el catálogo de librerías; en el centro, el detalle editable de la seleccionada.

Depende de la tecnología, porque cada ecosistema resuelve sus dependencias en un sitio distinto. Tú no eliges el mecanismo: lo pone Aseptic según lo que sea la librería.

TecnologíaDónde acaba el artefactoQué deshace desenlazar
npmcopiado sobre node_modules/<paquete> del consumidorborra la copia y restaura la carpeta original
Maven y Gradleel repositorio local (~/.m2), del que resuelven todos los consumidoresborra esa versión del repositorio local (Maven la vuelve a bajar del remoto)
Pythonla rueda (.whl), instalada en el entorno virtual de cada consumidordesinstala y reinstala la versión que hubiera antes
.NETla carpeta global de NuGet (~/.nuget/packages), de la que resuelven todos los consumidoresborra esa versión de la carpeta global (el siguiente restore la vuelve a traer)
Goningún sitio: un go.work en el repo del consumidor apunta al módulo localretira esa entrada del go.work (y el fichero entero al desenlazar la última)

En los seis casos es reversible: cada enlace deja una marca, y desenlazar solo deshace lo que puso Aseptic. Un artefacto que ya estaba ahí —una versión descargada del registro— no se toca.

Desde el botón de alta (barra superior) —también ofrecido en el fondo vacío de la sección cuando aún no hay ninguna—:

  • Añadir librería — eliges la carpeta del repo. Al elegirla, Aseptic te enseña lo que ha reconocido antes de dar de alta nada: la tecnología, el nombre del paquete, la versión y qué micros del catálogo ya lo declaran. Si la carpeta no es una librería que sepa construir, te lo dice ahí y no deja continuar.
  • Importar desde Git — clona el repo y lo da de alta. Aquí no hay vista previa: no hay nada en disco que mirar hasta después de clonar.

La tecnología se deduce del repo: pom.xml → Maven, build.gradle → Gradle, package.json con name → npm, pyproject.toml/setup.py → Python, go.mod → Go, *.csproj → .NET. El paquete es el nombre tal y como lo escribiría quien la consume: el name del package.json, groupId:artifactId en JVM, el nombre de distribución en Python, la ruta de módulo en Go (github.com/acme/core) y el id del paquete en .NET.

Identidad y receta de build. Se guarda solo (autosave con un pequeño retardo, igual que en Micros; se puede desactivar en Ajustes):

  • Nombre y Paquete.

  • Tecnología — la deducida al dar de alta. Puedes cambiarla si se equivocó.

  • Build — el comando que construye el artefacto y la ruta del artefacto. Si no los declaras se usan los del perfil de su tecnología:

    TecnologíaBuild por defectoRuta del artefacto
    npmnpm run builddist/<último segmento del paquete>
    Maven${mvn} install -DskipTeststarget
    Gradle${gradle} publishToMavenLocal -x testbuild/libs
    Pythonpython -m build --wheeldist
    Gogo build ./...el propio repo (.)
    .NETdotnet pack -c Releasebin/Release
  • Consumidores — los micros que usan la librería. Por defecto se detectan solos leyendo quién declara ese paquete (package.json, pom.xml, build.gradle, requirements.txt, pyproject.toml, el require del go.mod, el PackageReference de un .csproj); puedes fijarlos a mano (ids separados por coma).

  • Vigilar cambios — reconstruye y reenlaza automáticamente al cambiar el código.

${mvn} y ${gradle} se sustituyen por el ejecutable del repo: su wrapper (mvnw, gradlew) si lo trae, el global si no. Así la receta vale igual en todas las máquinas del equipo.

Por librería:

AcciónQué hace
InstalarInstala las dependencias de la librería en su repo (el build lo hace solo si faltan).
ConstruirGenera el artefacto.
EnlazarConstruye y pone el artefacto donde cada consumidor lo resuelve (ver la tabla de arriba).
DesenlazarDeshace el enlace en cada consumidor y restaura lo que hubiera antes.
VigilarHace construir + enlazar en caliente ante cada cambio. Necesita el motor vivo.

El estado de cada librería (construida / sin construir, enlazada en N consumidores, en watch) se ve en la lista y en el detalle.

Al vigilar, Aseptic ignora lo que escribe el propio build —node_modules, target, build/, bin/, obj/, vendor/, el entorno virtual y las cachés— para no entrar en un bucle de reconstrucción sin fin.

En JVM el artefacto no vive en el repo del consumidor, sino en tu repositorio local. Eso tiene dos consecuencias:

  • El enlace vale para todos los micros a la vez, estén o no en el escenario.
  • Si tu librería no deja resolver su versión desde el repo (un pom.xml que la hereda con ${revision}, un group calculado en un script de Gradle), el enlace te lo dirá. Se arregla declarando la versión en el YAML de la librería (stack.version).

Como en JVM, el paquete acaba en un almacén de la máquina, así que el enlace vale para todos los micros a la vez. Dos cosas que conviene saber:

  • El consumidor tiene que referenciar la misma versión que la librería empaqueta. Si referencia otra, esa se resuelve del origen de siempre y el enlace no se ve; Aseptic te lo dice en vez de dejarlo pasar.
  • Al enlazar se restaura cada consumidor una vez, con la carpeta del artefacto añadida a sus orígenes. Es necesario: NuGet da por buena la copia que ya tiene, así que sin ese paso reconstruir la librería sin subirle la versión no cambiaría nada.

En Go no hay artefacto: una librería son sus fuentes y las compila quien la usa. Enlazar escribe un go.work en el repo del consumidor con un use que apunta a tu copia local, que es el sitio que el propio Go reserva para esto (y por eso recomienda no versionarlo). Si el consumidor ya tenía su go.work, se aparta y vuelve intacto al desenlazar la última librería. No se toca su go.mod: un replace habría sido más corto, pero vive dentro de su fichero de dependencias y de su historia de Git.

Como en Micros, el detalle de una librería incluye su Git: cambiar de rama, hacer fetch y pull (--ff-only). El acceso es de solo lectura (nunca hace push), y si hay cambios sin confirmar, Aseptic avisa antes de cambiar de rama o actualizar.

Si la carpeta de una librería se movió, el detalle lo marca y ofrece relocalizar: eliges la carpeta nueva y se guarda la ruta.

Aseptic no modifica el repo del consumidor ni el de la librería: no toca su package.json, su pom.xml, su requirements.txt, su go.mod ni su .csproj. Lo que toca es lo que está fuera de Git —node_modules, el repositorio local, la carpeta global de NuGet, el entorno virtual, el go.work—, y siempre con marca para poder revertirlo.

En npm hay una excepción a tener en cuenta: un npm install en el consumidor pisa su node_modules y se lleva el enlace por delante. Aseptic lo detecta y vuelve a enlazar al terminar. Con Maven, Gradle, .NET y Go no pasa, porque lo que resuelve el consumidor no vive en su node_modules.

Borrar una librería del catálogo no la desenlaza: si estaba enlazada, desenlázala antes desde el detalle.

aseptic library detect/list/status/build/link/unlink/watch. Las de solo lectura (library_detect, library_list, library_status) están también como tools del MCP.