Gateway
npm-shrinkwrap
OpenClaw-broncodecheck-outs gebruiken pnpm-lock.yaml. Gepubliceerde OpenClaw-npm-pakketten gebruiken npm-shrinkwrap.json, het publiceerbare vergrendelingsbestand voor afhankelijkheden van npm, zodat pakketinstallaties de tijdens de release beoordeelde afhankelijkheidsgraaf gebruiken.
Waarom dit belangrijk is
Shrinkwrap is een bewijsstuk voor de afhankelijkheidsstructuur die met een npm-pakket wordt geleverd: het vertelt npm welke exacte transitieve versies moeten worden geïnstalleerd.
| Bestand | Waar het van belang is | Wat het betekent |
|---|---|---|
pnpm-lock.yaml |
OpenClaw-broncodecheck-out | Afhankelijkheidsgraaf voor beheerders |
npm-shrinkwrap.json |
Gepubliceerd npm-pakket | npm-installatiegraaf voor gebruikers |
package-lock.json |
Lokale npm-apps | Niet het publicatiecontract van OpenClaw |
Voor OpenClaw-releases betekent dit:
- het gepubliceerde pakket vraagt npm niet om tijdens de installatie een nieuwe afhankelijkheidsgraaf te bedenken;
- wijzigingen in afhankelijkheden kunnen worden beoordeeld omdat ze in een diff van een vergrendelingsbestand terechtkomen;
- de releasevalidatie test dezelfde graaf die gebruikers zullen installeren;
- verrassingen met de pakketgrootte of native afhankelijkheden komen vóór publicatie aan het licht.
Shrinkwrap is geen sandbox. Het maakt een afhankelijkheid op zichzelf niet veilig en vervangt geen hostisolatie, openclaw security audit, herkomstgegevens van pakketten of installatierooktests.
OpenClaw is een Gateway, Plugin-host, modelrouter en agentruntime, dus een standaardinstallatie beïnvloedt de opstarttijd, het schijfgebruik, downloads van native pakketten en de blootstelling aan risico's in de toeleveringsketen. Shrinkwrap biedt releasebeoordelingen een stabiele grens: beoordelaars zien wijzigingen in transitieve afhankelijkheden, validators wijzen onverwachte afwijkingen in vergrendelingsbestanden af en Plugin-pakketten bevatten hun eigen vergrendelde afhankelijkheidsgraaf in plaats van op het hoofdpakket te vertrouwen.
Genereren en controleren
Het npm-hoofdpakket openclaw, npm-Plugin-pakketten die eigendom zijn van OpenClaw (bijvoorbeeld @openclaw/discord) en publiceerbare werkruimtepakketten zoals @openclaw/ai bevatten bij publicatie npm-shrinkwrap.json. Werkruimteafhankelijkheden worden weggelaten uit de shrinkwrap van het hoofdpakket, omdat ze naast het hoofdpakket worden gepubliceerd; elk publiceerbaar werkruimtepakket legt in plaats daarvan zijn eigen transitieve structuur vast. Geschikte Plugin-pakketten kunnen ook worden gepubliceerd met expliciete bundledDependencies, waarbij hun runtime-afhankelijkheidsbestanden in het Plugin-tar-archief worden opgenomen in plaats van uitsluitend op omzetting tijdens de installatie te vertrouwen.
# Alle door shrinkwrap beheerde pakketten (hoofdmap + publiceerbare Plugins)pnpm deps:shrinkwrap:generatepnpm deps:shrinkwrap:check # Alleen het hoofdpakketpnpm deps:shrinkwrap:root:generatepnpm deps:shrinkwrap:root:check # Alleen pakketten waarop de huidige wijzigingenset van invloed ispnpm deps:shrinkwrap:changed:generatepnpm deps:shrinkwrap:changed:checkDe generator zet npm's publiceerbare vergrendelingsindeling om, maar wijst gegenereerde pakketversies af die nog niet in pnpm-lock.yaml voorkomen. Daardoor blijven de grenzen voor de leeftijd van pnpm-afhankelijkheden en de beoordeling van overschrijvingen en patches intact.
Behandel deze als beveiligingsgevoelig:
pnpm-lock.yamlnpm-shrinkwrap.json- meegeleverde afhankelijkheidspayloads van Plugins
- elke diff van
package-lock.json
OpenClaw-pakketvalidators vereisen shrinkwrap in nieuwe tar-archieven van het hoofdpakket en wijzen package-lock.json af voor gepubliceerde pakketten. Het npm-publicatiepad voor Plugins controleert de lokale shrinkwrap van de Plugin, installeert de lokale meegeleverde afhankelijkheden van het pakket en maakt of publiceert het pakket vervolgens.
Een gepubliceerd pakket inspecteren
Hoofdpakket:
npm pack openclaw@<version> --json --pack-destination /tmp/openclaw-packtar -tf /tmp/openclaw-pack/openclaw-<version>.tgz | grep '^package/npm-shrinkwrap.json$'Plugin-pakket:
npm pack @openclaw/discord@<version> --json --pack-destination /tmp/openclaw-plugin-packtar -tf /tmp/openclaw-plugin-pack/openclaw-discord-<version>.tgz | grep '^package/npm-shrinkwrap.json$'tar -tf /tmp/openclaw-plugin-pack/openclaw-discord-<version>.tgz | grep '^package/node_modules/'Achtergrondinformatie: npm-shrinkwrap.json.