Appearance
npm-Pakete veröffentlichen
Die Einbettungs-Pakete erscheinen öffentlich auf npm unter dem Scope @pollyou:
| Paket | Inhalt | Quelle |
|---|---|---|
@pollyou/embed-core | Web Component <pollyou-survey>, Collector-Client, CDN-Build | frontend/packages/embed-core |
@pollyou/react | React-Komponente und Hook | frontend/packages/react |
@pollyou/vue | Vue-Komponente, Plugin und Composable | frontend/packages/vue |
@pollyou/angular | Angular-Komponente | frontend/packages/angular |
@pollyou/angularjs | AngularJS-Komponente | frontend/packages/angularjs |
Versionen und Changelogs verwaltet Changesets, veröffentlicht wird über npm Staged Publishing. Veröffentlicht wird jedes Paket ohne "private": true; Dashboard, Docs und die übrigen internen Pakete sind privat und werden übersprungen. Neue öffentliche Pakete brauchen deshalb keine Änderung an .changeset/config.json.
Änderungen beschreiben
Wer ein öffentliches Paket ändert, legt im selben Commit ein Changeset an:
bash
pnpm changeset # Pakete und Art der Änderung (patch/minor/major) wählen, Text schreiben
pnpm changeset:status # zeigt, welche Versionen beim nächsten Release entstehenDas erzeugt eine Datei .changeset/<name>.md, die mit in den Pull Request gehört. Abhängige Pakete (z. B. @pollyou/react bei einer neuen @pollyou/embed-core-Version) erhöht Changesets automatisch mit.
Release auslösen
Die Bitbucket-Pipeline release-npm (Pipelines → Run pipeline → Branch main → custom: release-npm) läuft so:
- Frontend-Prüfungen wie in jedem Build (
ci/frontend.sh: Lint, Typecheck, Tests, Build, Paketinhalt). - Manuelle Freigabe des Schritts „Release npm packages“, danach
ci/release-npm.sh:- liegen Changesets vor:
changeset versionerhöht die Versionen, schreibt dieCHANGELOG.mdder Pakete und aktualisiert den Lockfile; das Ergebnis wird alschore(release): version packages [skip ci]committet, pnpm buildundpnpm pack:check,pnpm release:stage(ci/stage-npm.mjs) packt jedes öffentliche Paket, dessen Version weder auf npm liegt noch schon vorgemerkt ist, mitpnpm pack(dasworkspace:^durch echte Versionsbereiche ersetzt) und merkt es mitnpm stage publishbei npm vor (Staged Publishing); dazu entsteht ein Git-Tag wie@pollyou/react@1.1.0,- Commit und Tags werden auf den Branch gepusht.
- liegen Changesets vor:
- Freigabe auf npm (siehe unten): Erst danach sind die Versionen installierbar.
Repository-Variable: NPM_TOKEN (gesichert) – ein npm Granular Access Token mit „Read and write (stage only)“ für den Scope @pollyou. Das Token landet nur in einer temporären .npmrc außerhalb des Repositorys. Ein Stage-only-Token kann allein nichts veröffentlichen; npm lehnt direktes npm publish damit ab (bei neuen Paketen als E404 beim PUT).
Ohne neue Changesets merkt die Pipeline nur Versionen vor, die noch fehlen – beim allerersten Lauf also die aktuellen Versionen aller Pakete. Ein erneuter Lauf überspringt bereits vorgemerkte Versionen.
Vorgemerkte Versionen freigeben
Ein Maintainer der Organisation @pollyou mit aktivierter Zwei-Faktor-Authentifizierung gibt jede vorgemerkte Version frei:
- auf npmjs.com im Tab Staged Packages → Approve (mit 2FA-Bestätigung), oder
- per CLI:
npm stage listzeigt die vorgemerkten Versionen mit ihrer<stage-id>,npm stage approve <stage-id>gibt frei (npm stage reject <stage-id>verwirft).
Reihenfolge: zuerst @pollyou/embed-core, dann die Framework-Pakete, die davon abhängen – das Pipeline-Log listet die Pakete am Ende in dieser Reihenfolge. Ein neues Paket zeigt bis zur ersten Freigabe nur die öffentliche Platzhalter-Version 0.0.0-stage.
Probelauf
bash
DRY_RUN=1 ./ci/release-npm.sh # versioniert lokal, baut, prüft und zeigt, was vorgemerkt würde – ohne Commit, Staging und Push
pnpm release:stage --dry-run # nur: welche Pakete würden vorgemerkt?Änderungen eines Probelaufs (Versionen, Changelogs) danach mit git checkout . verwerfen.
Paketinhalt
pnpm pack:check (ci/pack-check.mjs, Teil von ci/frontend.sh) packt jedes öffentliche Paket mit pnpm pack --dry-run und prüft, dass
- alle in
main,module,typesundexportsgenannten Dateien enthalten sind (beipublishConfig.exportsbzw.publishConfig.directorydie veröffentlichte Fassung), package.jsonundREADME.mddabei sind,- keine Quelltexte, Tests, Stories oder Build-Konfigurationen mitkommen,
publishConfig.accesspublicist und eine Lizenz angegeben ist.
Besonderheiten:
@pollyou/embed-coreexportiert im Workspace seine TypeScript-Quellen (Dashboard und Framework-Pakete nutzen sie direkt). Erst beim Veröffentlichen gelten überpublishConfigdie Einträgedist/esm/index.js(ESM, Lit als Abhängigkeit) unddist/types/index.d.ts; die Typen der internen Pakete@pollyou/themesund@pollyou/survey-schemasind dort eingebettet (tsdown.types.config.ts), deren Code steckt bereits im ESM-Build. Zusätzlich enthält das Paket den CDN-Build (dist/cdn), sodassembed.jsauch über unpkg/jsDelivr erreichbar ist.@pollyou/reactund@pollyou/vuebauen mit tsdown ESM, CommonJS und Typen (.d.ts/.d.cts);@pollyou/reactbehält die Direktive'use client'.@pollyou/angularwird mit ng-packagr nachdistgebaut und von dort veröffentlicht (publishConfig.directory).