Naar hoofdinhoud gaan

Manifest van een artefactpakket

Schema-id: artifact-package@1 Machineleesbaar schema: artifact-package.schema.json Bestandsnaam in het archief: parsware.json, in de root

Dit maakt van een map met bundleruitvoer iets wat het platform kan accepteren. Het wordt door npm run pack naast de build-uitvoer geschreven en daarmee samen gezipt; het platform leest het bij het uploaden, en een met de hand samengesteld archief wordt volgens precies dezelfde regel geweigerd als een gegenereerd archief (het principe van één validatiepad, sectie 6.7).

Waarom het bestaat​

Vroeger vroeg registratie een maker om zes velden, waarvan er twee uit een bundlerconfig werden overgenomen: de Module Federation-scope en de beschikbaar gestelde module. Had je een van beide fout, dan gaf dat steeds hetzelfde symptoom — het besturingselement laadde niet — zonder aanwijzing welke van de twee fout was. De build kent ze allebei al, dus schrijft hij ze op.

Structuur​

VeldTypeVerplichtOpmerkingen
formatVersiongeheel getaljaMoet precies 1 zijn. Een const in plaats van een minimum, zodat een archief in een toekomstig formaat met een duidelijke melding wordt geweigerd in plaats van volgens de regels van vandaag te worden gelezen en ergens minder voor de hand liggend te falen.
kindtekenreeksjaCustomControl. Aangepaste apps komen in deze enum wanneer ze het pakket overnemen — ze gebruiken dan dezelfde opslag, cache en hetzelfde serveereindpunt, en verschillen alleen in de soortspecifieke velden van dit manifest.
logicalNametekenreeksjaMet uitgeversvoorvoegsel, in kleine letters snake_case (bijv. par_signature_pad). Bij het uploaden gecontroleerd tegen het uitgeversvoorvoegsel van de eigenaar-oplossing, zodat een archief van elders geen voorvoegsel kan claimen.
displayNametekenreeksjaLeesbare naam die in het veldpalet van de formulierontwerper wordt getoond.
descriptiontekenreeks | nullneeKorte beschrijving, maximaal 512 tekens.
versiontekenreeksjaVersie in drie delen (1.2.3), de eigen npm-versie van het besturingselement. Vastgelegd voor diagnose en getoond aan een maker die controleert of wat is geïnstalleerd ook is wat hij heeft gebouwd; het blokkeert niets.
scopetekenreeksjaDe scope van de Module Federation-container, gelezen uit de federation-config van de build.
moduletekenreeksjaHet pad van de beschikbaar gestelde module (bijv. ./Control), gelezen uit de exposes-map van de federation-config.
entrytekenreeksjaHet startbestand van de container in het archief (bijv. remoteEntry.js). Een kale bestandsnaam, geen pad: het noemt een bestand in de root van het archief, en dat is ook het basispad van waaruit het platform de asynchrone chunks van het artefact serveert.
substitutesFortekenreeks[]ja voor CustomControlDe families van veldgegevenstypen waaraan het besturingselement kan worden gekoppeld. Moet exact overeenkomen met de enum van custom-control-manifest@1.
requestedScopestekenreeks[]ja voor CustomAppDe OAuth-scopes waarvan een aangepaste app declareert dat hij ze nodig heeft, aangevraagd wanneer zijn App Context Token wordt aangemaakt (§6.3). Afwezig bij een aangepast besturingselement, dat er geen declareert — dat draait met de rechten van de persoon die het gebruikt (§28).

Waar de waarden vandaan komen​

Twee bronnen, en geen van beide raadt naar de helft van de ander:

  • scope, module, entry worden gelezen uit de eigen mf-manifest.json van de build, omdat de bundler ze bepaalt. @module-federation/vite genereert dat bestand alleen met manifest: true, en dat staat standaard uit — dus elk Parsware-besturingselement zet het aan, en de packer weigert te gokken als het ontbreekt.
  • logicalName, displayName, description, substitutesFor komen uit een parsware-blok in de package.json van het besturingselement, omdat de bundler van geen van alle ooit heeft gehoord. version is de eigen version van dat bestand.

Wat bewust ontbreekt​

Er zijn geen gedeclareerde scopes en geen gedeclareerde tabellen. Een artefact draait met de rechten van de persoon die het gebruikt (§24), dus een scopelijst op het artefact zou zijn gebruiker alleen maar kunnen beperken, nooit verruimen.

Er is geen remote-entry-URL. Het pakket wordt geserveerd vanaf de eigen origin van het platform, op een pad dat wordt berekend uit de omgeving en de logische naam. Daardoor kan een besturingselement binnen zijn oplossing meereizen in plaats van te worden opgehaald bij een externe host.

Wat het platform controleert​

Bij het uploaden, voordat er iets wordt opgeslagen:

  1. het archief valt binnen de maximale gecomprimeerde grootte en is een leesbare zip;
  2. het bevat niet meer dan het geconfigureerde aantal bestanden, en pakt uit tot niet meer dan het geconfigureerde totaal (gecontroleerd tijdens het lezen en nogmaals tijdens het uitpakken — de gedeclareerde lengte in een zip-header is een bewering die het archief over zichzelf doet);
  3. elk pad in het archief is relatief en veilig — .., een pad vanaf de root en een Windows-stationsletter of UNC-voorvoegsel worden geweigerd in plaats van opgeschoond, want een archief dat een pad buiten zijn eigen map noemt, is er niet een om stilletjes te repareren;
  4. elk bestand heeft een extensie die op de allowlist van het platform voor serveren staat;
  5. parsware.json staat in de root en valideert tegen dit schema;
  6. de kind past bij het eindpunt, en het bestand dat entry noemt, is echt aanwezig.

Gerelateerd​