Centralized Extensions

Studio TypeScript

7. Februar 2022 / Stephan Post

generell empfehlen wir solche "centralized extensions" vor allem für den Studio-Client-Teil nicht mehr. Da durch den völlig anderen Technologie-Stack (Build Tool, Programmiersprache, Libraries, Ausführungumgebung) mehr und mehr andere Entwickler*innen an Studio Client arbeiten als an den Java Applications (oder zumindest dieselbe Person zwei recht verschiedene Rollen spielt), halten wir auch für Extensions eine Modularisierung nach Applikation für die bessere Lösung. Nur so kann z.B. in einer IDE ein Workspace / Ordner geöffnet werden, der nur die Studio-Client-Module enthält.

Dennoch sollte diese Arbeitsweise noch funktionieren. Mit pnpm sollte genau das, was Sie versucht haben, gehen: relative Pfade in der pnpm-workspace.yaml.
Diese muss man allerdings nicht per Hand setzen, denn die Version 4.5.1 des Extensions Tools, die in CM11 voreingestellt ist (in workspace-configuration/extensions/pom.xml), sollte genau das übernehmen.

Eine nötige Änderung in der Studio-Client-Plugin-Struktur ergibt sich aber aus den neuen Studio Apps. Da es nun auch eine Workflow App gibt, die ebenfalls durch Extensions erweitert werden kann, so wie Packages, die von mehreren Studio Apps verwendet werden (z.B. DocType-Icons und -Localizations), müssen "centralized" Studio-Client-Extensions nun wie folgt abgelegt werden:

modules/extensions//apps/studio-client/pnpm-workspace.yaml, aggregating the packages, which must be placed in the corresponding sub-workspace paths:
./apps/main/... - classic Studio Client plugin
./apps/workflow/... - Workflow App plugin
./shared/ext/...- shared code used by both (all) App Extensions, using Ext
./shared/js/... - shared code used by both (all) App Extensions, not using Ext (plain TypeScript / JavaScript)
Eine "klassische" Studio-Client-Extensions müsste also von modules/extensions//studio-client verschoben werden nach modules/extensions//apps/studio-client/apps/main, damit das Tool sie korrekt erkennt, und unter modules/extensions//apps/studio-client/pnpm-workspace.yaml muss (ähnlich zum root pom.xml, das jede Extension aggregiert) ein "virtueller" pnpm Workspace erstellt werden, der als "Inhaltsverzeichnis" aller Packages dieser Extension dient.
Nach diesen Änderungen ist ein pnpm install (wie immer in apps/studio-client) nötig.
Mit extensions:list -Dverbose kann man direkt sehen, ob der Studio-Client-Anteil der eigenen Extension erkannt wurde.

Was "centralized extensions" und Studio Client angeht, sind wir noch Dokumentation schuldig. Diese ist in Arbeit und kommt mit 2201 oder wird ggf. auch für 2110 noch aktualisiert.

Wir freuen uns über Ihre Rückmeldung, ob das so funktioniert oder, falls nicht, was es für Fehler gibt!

Mit freundlichen Grüßen

DRAFT