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
| Veld | Type | Verplicht | Opmerkingen |
|---|---|---|---|
formatVersion | geheel getal | ja | Moet 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. |
kind | tekenreeks | ja | CustomControl. 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. |
logicalName | tekenreeks | ja | Met 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. |
displayName | tekenreeks | ja | Leesbare naam die in het veldpalet van de formulierontwerper wordt getoond. |
description | tekenreeks | null | nee | Korte beschrijving, maximaal 512 tekens. |
version | tekenreeks | ja | Versie 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. |
scope | tekenreeks | ja | De scope van de Module Federation-container, gelezen uit de federation-config van de build. |
module | tekenreeks | ja | Het pad van de beschikbaar gestelde module (bijv. ./Control), gelezen uit de exposes-map van de federation-config. |
entry | tekenreeks | ja | Het 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. |
substitutesFor | tekenreeks[] | ja voor CustomControl | De families van veldgegevenstypen waaraan het besturingselement kan worden gekoppeld. Moet exact overeenkomen met de enum van custom-control-manifest@1. |
requestedScopes | tekenreeks[] | ja voor CustomApp | De 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,entryworden gelezen uit de eigenmf-manifest.jsonvan de build, omdat de bundler ze bepaalt.@module-federation/vitegenereert dat bestand alleen metmanifest: 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,substitutesForkomen uit eenparsware-blok in depackage.jsonvan het besturingselement, omdat de bundler van geen van alle ooit heeft gehoord.versionis de eigenversionvan 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:
- het archief valt binnen de maximale gecomprimeerde grootte en is een leesbare zip;
- 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);
- 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; - elk bestand heeft een extensie die op de allowlist van het platform voor serveren staat;
parsware.jsonstaat in de root en valideert tegen dit schema;- de
kindpast bij het eindpunt, en het bestand datentrynoemt, is echt aanwezig.
Gerelateerd
- Een aangepast besturingselement bouwen — er een schrijven en verpakken.
- Een aangepast besturingselement registreren — het pakket uploaden.
- Manifest van een aangepast besturingselement — de opgeslagen vorm waarin dit manifest wordt opgenomen.