{"meta":{"title":"Node.js-Pakete veröffentlichen","intro":"In diesem Tutorial erfährst du, wie du Node.js-Pakete als Teil deines Workflows zur kontinuierlichen Integration (CI) in einer Registry veröffentlichst.","product":"GitHub Actions","breadcrumbs":[{"href":"/de/actions","title":"GitHub Actions"},{"href":"/de/actions/tutorials","title":"Anleitungen"},{"href":"/de/actions/tutorials/publish-packages","title":"Veröffentlichen von Paketen"},{"href":"/de/actions/tutorials/publish-packages/publish-nodejs-packages","title":"Veröffentlichen von Node.js-Paketen"}],"documentType":"article"},"body":"# Node.js-Pakete veröffentlichen\n\nIn diesem Tutorial erfährst du, wie du Node.js-Pakete als Teil deines Workflows zur kontinuierlichen Integration (CI) in einer Registry veröffentlichst.\n\n## Einführung\n\nDiese Anleitung zeigt Ihnen, wie Sie einen Workflow erstellen, der Node.js-Pakete in den Registrys von GitHub Packages und npm veröffentlicht, nachdem die Tests der kontinuierlichen Integration (CI) erfolgreich bestanden wurden.\n\n## Voraussetzungen\n\nWir empfehlen, dass Du ein grundlegendes Verständnis von Workflowkonfigurations-Optionen hast und darüber, wie Du eine Workflow-Datei erstellst. Weitere Informationen finden Sie unter [Schreiben von Workflows](/de/actions/how-tos/write-workflows).\n\nWeitere Informationen zum Erstellen eines CI-Workflows für dein Node.js-Projekt findest du unter [Erstellen und Testen von Node.js-Code](/de/actions/tutorials/build-and-test-code/nodejs).\n\nVielleicht findest Du es auch hilfreich, ein grundlegendes Verständnis von Folgendem zu haben:\n\n* [Arbeiten mit der npm-Registry](/de/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)\n* [Speichern von Informationen in Variablen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables)\n* [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)\n* [Verwenden von GITHUB\\_TOKEN für die Authentifizierung in Workflows](/de/actions/tutorials/authenticate-with-github_token)\n\n## Informationen zur Paketkonfiguration\n\nDie Felder `name` und `version` in der `package.json`-Datei erstellen einen eindeutigen Bezeichner, den Registrierungen zum Verknüpfen deines Pakets mit einer Registrierung verwenden. Du kannst eine Zusammenfassung für die Paketauflistungsseite hinzufügen, indem du ein `description`-Feld in die `package.json`-Datei einschließt. Weitere Informationen findest du unter [Erstellen einer package.json-Datei](https://docs.npmjs.com/creating-a-package-json-file) und [Erstellen von Node.js-Modulen](https://docs.npmjs.com/creating-node-js-modules) in der npm-Dokumentation.\n\nWenn eine lokale `.npmrc`-Datei vorhanden und der `registry`-Wert angegeben ist, verwendet der `npm publish`-Befehl die in der `.npmrc`-Datei konfigurierte Registrierung. Du kannst die `setup-node`-Aktion verwenden, um auf dem Runner eine lokale `.npmrc`-Datei zu erstellen, in der die Standardregistrierung und der Standardbereich konfiguriert werden. Die `setup-node`-Aktion akzeptiert als Eingabe auch ein Authentifizierungstoken, das für den Zugriff auf private Registrierungen oder die Veröffentlichung von Knotenpaketen verwendet wird. Weitere Informationen findest du unter [`setup-node`](https://github.com/actions/setup-node/).\n\nMithilfe der Aktion `setup-node` kannst du die im Runner installierte Node.js-Version angeben.\n\nWenn du in deinem Workflow Schritte zum Konfigurieren der `publishConfig`-Felder in der `package.json`-Datei hinzufügst, musst du die Registrierungs-URL (registry-url) nicht mit der `setup-node`-Aktion angeben. Dann kannst du das Paket jedoch nur in einer einzigen Registrierung veröffentlichen. Weitere Informationen findest du unter [publishConfig](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#publishconfig) in der npm-Dokumentation.\n\n## Pakete in der npm-Registry veröffentlichen\n\nDu kannst einen Workflow auslösen, um dein Paket jedes Mal zu veröffentlichen, wenn du ein neues Release veröffentlichst. Der Prozess im folgenden Beispiel wird ausgeführt, wenn das Releaseereignis vom Typ `published` ausgelöst wird. Wenn die CI-Tests erfolgreich sind, lädt der Prozess das Paket in die npm-Registrierung hoch. Weitere Informationen finden Sie unter [Veröffentlichungen in einem Repository verwalten](/de/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release).\n\nUm in deinem Workflow authentifizierte Vorgänge für die npm-Registrierung auszuführen, musst du dein npm-Authentifizierungstoken als Geheimnis speichern. Erstelle beispielsweise ein Repositorygeheimnis namens `NPM_TOKEN`. Weitere Informationen finden Sie unter [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\nStandardmäßig verwendet npm das `name`-Feld der `package.json`-Datei, um den Namen deines veröffentlichten Pakets zu bestimmen. Wenn Du in einem globalen Namespace veröffentlichst, brauchst Du nur den Paketnamen anzugeben. Du kannst beispielsweise ein Paket namens `my-package` unter `https://www.npmjs.com/package/my-package` veröffentlichen.\n\nWenn du ein Paket veröffentlichst, das ein Präfix für den Bereich (scope) enthält, füge den Bereich in den Namen der `package.json`-Datei ein. Wenn beispielsweise das Präfix des npm-Bereichs „octocat“ und der Paketname „hello-world“ lautet, sollte der `name` in der `package.json`-Datei `@octocat/hello-world` lauten. Wenn dein npm-Paket ein Bereichspräfix verwendet und das Paket öffentlich ist, musst du die Option `npm publish --access public` verwenden. Dies ist eine Option, die npm verlangt, um zu verhindern, dass jemand versehentlich ein privates Paket veröffentlicht.\n\nWenn Sie Ihr Paket mit Provenienz veröffentlichen möchten, fügen Sie das `--provenance` Kennzeichen mit Ihrem `npm publish` Befehl ein. Auf diese Weise können Sie öffentlich und verifizierbar festlegen, wo und wie Ihr Paket erstellt wurde, wodurch die Lieferkettensicherheit für Personen erhöht wird, die Ihr Paket nutzen. Weitere Informationen finden Sie in der npm-Dokumentation unter [Generieren von Provenienzanweisungen](https://docs.npmjs.com/generating-provenance-statements) .\n\nIn diesem Beispiel wird das `NPM_TOKEN`-Geheimnis in der Umgebungsvariablen `NODE_AUTH_TOKEN` gespeichert. Wenn die `setup-node`-Aktion eine `.npmrc`-Datei erstellt, verweist sie auf das Token aus der`NODE_AUTH_TOKEN`-Umgebungsvariablen.\n\n```yaml copy\nname: Publish Package to npmjs\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      id-token: write\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to npm\n      - uses: actions/setup-node@v7\n        with:\n          node-version: '20.x'\n          registry-url: 'https://registry.npmjs.org'\n      - run: npm ci\n      - run: npm publish --provenance --access public\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\nIm vorherigen Beispiel erstellt die `setup-node`-Aktion im Runner eine `.npmrc`-Datei mit dem folgenden Inhalt:\n\n```shell\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\nregistry=https://registry.npmjs.org/\nalways-auth=true\n```\n\nBeachte, dass du die `registry-url` in `https://registry.npmjs.org/` auf `setup-node` festlegen musst, damit deine Anmeldeinformationen ordnungsgemäß konfiguriert werden.\n\n## Pakete auf GitHub Packages veröffentlichen\n\nDu kannst einen Workflow auslösen, um dein Paket jedes Mal zu veröffentlichen, wenn du ein neues Release veröffentlichst. Der Prozess im folgenden Beispiel wird ausgeführt, wenn das Releaseereignis vom Typ `published` ausgelöst wird. Wenn die CI-Tests bestehen, lädt der Prozess das Paket in GitHub Packages. Weitere Informationen finden Sie unter [Veröffentlichungen in einem Repository verwalten](/de/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release).\n\n### Konfigurieren des Zielrepositorys\n\nDie Verknüpfung Ihres Pakets mit GitHub Packages mithilfe des Schlüssels `repository` ist optional. Wenn Sie den `repository` Schlüssel in Ihrer `package.json` Datei nicht angeben möchten, wird Ihr Paket nicht mit einem Repository verknüpft, wenn es veröffentlicht wird, aber Sie können das Paket später mit einem Repository verbinden.\n\nWenn Sie den Schlüssel `repository` in Ihrer Datei `package.json` angeben, wird das in diesem Schlüssel angegebene Repository als Ziel-NPM-Registry für GitHub Packages verwendet. Zum Beispiel führt das Veröffentlichen des folgenden `package.json` zur Veröffentlichung eines Pakets mit dem Namen `my-package` im Repository `octocat/my-other-repo`GitHub.\n\n```json\n{\n  \"name\": \"@octocat/my-package\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/octocat/my-other-repo.git\"\n  },\n}\n```\n\n### Authentifizieren beim Zielrepository\n\nUm authentifizierte Vorgänge mit der GitHub Packages-Registry in Ihrem Workflow auszuführen, können Sie die `GITHUB_TOKEN` verwenden. Das `GITHUB_TOKEN`-Geheimnis wird jedes Mal auf ein Zugriffstoken für das Repository gesetzt, wenn ein Job in einem Workflow beginnt. Die Berechtigungen für dieses Zugriffstoken müssen in der Workflowdatei festgelegt werden, um den Lesezugriff auf die `contents`-Berechtigung und Schreibzugriff auf die `packages`-Berechtigung zu gewähren. Weitere Informationen finden Sie unter [Verwenden von GITHUB\\_TOKEN für die Authentifizierung in Workflows](/de/actions/tutorials/authenticate-with-github_token).\n\nWenn Sie Ihr Paket in einem anderen Repository veröffentlichen möchten, müssen Sie eine personal access token (classic) Berechtigung zum Schreiben in Pakete im Ziel-Repository verwenden. Weitere Informationen findest du unter [Verwalten deiner persönlichen Zugriffstoken](/de/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) und [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\n### Beispielworkflow\n\nIn diesem Beispiel wird das `GITHUB_TOKEN`-Geheimnis in der Umgebungsvariablen `NODE_AUTH_TOKEN` gespeichert. Wenn die `setup-node`-Aktion eine `.npmrc`-Datei erstellt, verweist sie auf das Token aus der`NODE_AUTH_TOKEN`-Umgebungsvariablen.\n\n```yaml copy\nname: Publish package to GitHub Packages\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      packages: write\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to GitHub Packages\n      - uses: actions/setup-node@v7\n        with:\n          node-version: '20.x'\n          registry-url: 'https://npm.pkg.github.com'\n          # Defaults to the user or organization that owns the workflow file\n          scope: '@octocat'\n      - run: npm ci\n      - run: npm publish\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\nDie `setup-node`-Aktion erstellt eine `.npmrc`-Datei im Runner. Wenn du die `scope`-Eingabe für die `setup-node`-Aktion verwendest, enthält die `.npmrc`-Datei das Bereichspräfix. Die `setup-node`-Aktion legt den Bereich in der `.npmrc`-Datei standardmäßig auf das Konto fest, das die Workflowdatei enthält.\n\n```shell\n//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}\n@octocat:registry=https://npm.pkg.github.com\nalways-auth=true\n```\n\n## Pakete mittels Yarn veröffentlichen\n\nWenn Du den Paketmanager „Yarn“ verwendest, kannst Du mit Yarn Pakete installieren und veröffentlichen.\n\n```yaml copy\nname: Publish Package to npmjs\non:\n  release:\n    types: [published]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      # Setup .npmrc file to publish to npm\n      - uses: actions/setup-node@v7\n        with:\n          node-version: '20.x'\n          registry-url: 'https://registry.npmjs.org'\n          # Defaults to the user or organization that owns the workflow file\n          scope: '@octocat'\n      - run: yarn\n      - run: yarn npm publish // for Yarn version 1, use `yarn publish` instead\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\nUm sich während der Veröffentlichung mit der Registrierung zu authentifizieren, muss Ihr Authentifizierungstoken auch in der Datei `yarnrc.yml` definiert sein. Weitere Informationen finden Sie im Artikel [Einstellungen](https://yarnpkg.com/configuration/yarnrc#npmAuthToken) in der Yarn-Dokumentation."}