{"meta":{"title":"Publication de packages Node.js","intro":"Dans ce tutoriel, vous allez apprendre à publier des packages Node.js dans un registre dans le cadre de votre workflow d’intégration continue (CI).","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/tutorials","title":"Tutoriels"},{"href":"/fr/actions/tutorials/publish-packages","title":"Publier des packages"},{"href":"/fr/actions/tutorials/publish-packages/publish-nodejs-packages","title":"Publier des packages Node.js"}],"documentType":"article"},"body":"# Publication de packages Node.js\n\nDans ce tutoriel, vous allez apprendre à publier des packages Node.js dans un registre dans le cadre de votre workflow d’intégration continue (CI).\n\n## Présentation\n\nCe guide vous montre comment créer un workflow qui publie des packages Node.js sur les registres GitHub Packages et npm après la réussite des tests d’intégration continue (CI).\n\n## Prérequis\n\nIl est recommandé d’avoir une compréhension de base des options de configuration de workflows et de la création de fichiers de workflow. Pour plus d’informations, consultez « [Écriture de workflows](/fr/actions/learn-github-actions) ».\n\nPour plus d’informations sur la création d’un workflow CI pour votre projet Node.js, consultez [Création et test de code Node.js](/fr/actions/automating-builds-and-tests/building-and-testing-nodejs).\n\nVous pouvez également trouver utile d’avoir une compréhension de base des éléments suivants :\n\n* [Utilisation du registre npm](/fr/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)\n* [Stocker des informations dans des variables](/fr/actions/learn-github-actions/variables)\n* [Utilisation de secrets dans GitHub Actions](/fr/actions/security-guides/using-secrets-in-github-actions)\n* [Utiliser GITHUB\\_TOKEN pour l’authentification dans les flux de travail](/fr/actions/security-guides/automatic-token-authentication)\n\n## À propos de la configuration d’un package\n\nLes champs `name` et `version` du fichier `package.json` créent un identifiant unique que les registres utilisent pour associer votre package à un registre. Vous pouvez ajouter un résumé pour la page de présentation du package en incluant un champ `description` dans le fichier `package.json`. Pour plus d’informations, consultez [Création d’un fichier package.json](https://docs.npmjs.com/creating-a-package-json-file) et [Création de modules Node.js](https://docs.npmjs.com/creating-node-js-modules) dans la documentation npm.\n\nLorsqu’un fichier `.npmrc` local existe et qu’une valeur `registry` y est spécifiée, la commande `npm publish` utilise le registre configuré dans le fichier `.npmrc`. Vous pouvez utiliser `setup-node` l’action pour créer un fichier local `.npmrc` sur l’exécuteur qui configure le registre et la portée par défaut. L’action `setup-node` accepte également un jeton d’authentification en tant qu’entrée. Celui-ci est utilisé pour accéder à des registres privés ou pour publier des packages de nœuds. Pour plus d’informations, consultez [`setup-node`](https://github.com/actions/setup-node/).\n\nVous pouvez spécifier la version de Node.js installée sur l’exécuteur à l’aide de l’action `setup-node`.\n\nSi vous ajoutez des étapes dans votre workflow pour configurer les champs `publishConfig` dans votre fichier `package.json`, vous n’avez pas besoin de spécifier l’URL du registre via l’action `setup-node`, mais vous serez limité à la publication du package dans un seul registre. Pour plus d’informations, consultez [publishConfig](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#publishconfig) dans la documentation npm.\n\n## Publication de packages sur le registre npm\n\nVous pouvez déclencher un workflow pour publier votre package chaque fois que vous publiez une nouvelle version. Le processus de l’exemple suivant est exécuté quand l’événement de mise en production de type `published` est déclenché. Si les tests CI réussissent, le processus charge le package dans le registre npm. Pour plus d’informations, consultez « [Gestion des versions dans un référentiel](/fr/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release) ».\n\nPour effectuer des opérations authentifiées sur le registre npm dans votre workflow, vous devez stocker votre jeton d’authentification npm en tant que secret. Par exemple, créez un secret de référentiel appelé `NPM_TOKEN`. Pour plus d’informations, consultez « [Utilisation de secrets dans GitHub Actions](/fr/actions/security-guides/using-secrets-in-github-actions) ».\n\nPar défaut, npm utilise le champ `name` du fichier `package.json` pour déterminer le nom de votre package publié. Lorsque vous publiez sur un espace de noms global, vous devez uniquement inclure le nom du package. Par exemple, vous allez publier un package nommé `my-package` sur `https://www.npmjs.com/package/my-package`.\n\nSi vous publiez un package incluant un préfixe de portée (scope), incluez cette portée dans le nom de votre fichier `package.json`. Par exemple, si votre préfixe de portée npm est « octocat » et que le nom du package est « hello-world », la valeur `name` dans votre fichier `package.json` doit être `@octocat/hello-world`. Si votre package npm utilise un préfixe d’étendue et que le package est public, vous devez utiliser l’option `npm publish --access public`. Il s’agit d’une option requise par npm pour empêcher une personne de publier involontairement un package privé.\n\nSi vous souhaitez publier votre package avec une attestation de provenance, incluez l’option `--provenance` avec votre commande `npm publish`. Cela vous permet d’établir publiquement et de manière vérifiable où et comment votre package a été construit, ce qui renforce la sécurité de la chaîne d’approvisionnement pour les personnes qui consomment votre package. Pour plus d’informations, consultez [Génération de déclarations de provenance](https://docs.npmjs.com/generating-provenance-statements) dans la documentation npm.\n\nCet exemple stocke le secret `NPM_TOKEN` dans la variable d’environnement `NODE_AUTH_TOKEN`. Lorsque l’action `setup-node` crée un fichier `.npmrc`, elle référence le jeton provenant de la variable d’environnement `NODE_AUTH_TOKEN`.\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@v4\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\nDans l’exemple ci-dessus, l’action `setup-node` crée un fichier `.npmrc` sur le runner avec le contenu suivant :\n\n```shell\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\nregistry=https://registry.npmjs.org/\nalways-auth=true\n```\n\nNotez que vous devez définir l’`registry-url` sur `https://registry.npmjs.org/` dans `setup-node` pour configurer correctement vos informations d’identification.\n\n## Publication de packages sur GitHub Packages\n\nVous pouvez déclencher un workflow pour publier votre package chaque fois que vous publiez une nouvelle version. Le processus de l’exemple suivant est exécuté quand l’événement de mise en production de type `published` est déclenché. Si les tests CI réussissent, le processus charge le package sur GitHub Packages. Pour plus d’informations, consultez « [Gestion des versions dans un référentiel](/fr/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release) ».\n\n### Configuration du référentiel de destination\n\nLa liaison de votre package à GitHub Packages à l’aide de la clé `repository` est facultative. Si vous choisissez de ne pas fournir la clé `repository` dans votre fichier `package.json`, alors votre package ne sera pas lié à un référentiel lors de sa publication, mais vous pourrez choisir de le connecter à un référentiel ultérieurement.\n\nSi vous fournissez la clé `repository` dans votre fichier `package.json`, alors le référentiel indiqué dans cette clé est utilisé comme registre npm de destination pour GitHub Packages. Par exemple, la publication du fichier `package.json` ci-dessous aboutit à un package nommé `my-package` publié dans le dépôt GitHub `octocat/my-other-repo`.\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### Authentification auprès du référentiel de destination\n\nPour effectuer des opérations authentifiées sur le registre GitHub Packages dans votre workflow, vous pouvez utiliser `GITHUB_TOKEN`. Le secret `GITHUB_TOKEN` a la valeur d’un jeton d’accès pour le dépôt chaque fois qu’un travail d’un workflow démarre. Vous devez définir les autorisations de ce jeton d’accès dans le fichier de workflow afin d’octroyer l’accès en lecture pour l’autorisation `contents` et l’accès en écriture pour l’autorisation `packages`. Pour plus d’informations, consultez « [Utiliser GITHUB\\_TOKEN pour l’authentification dans les flux de travail](/fr/actions/security-guides/automatic-token-authentication) ».\n\nSi vous souhaitez publier votre package sur un autre dépôt, vous devez utiliser un personal access token (classic) qui a l’autorisation d’écrire dans des packages dans le référentiel de destination. Pour plus d’informations, consultez « [Gestion de vos jetons d’accès personnels](/fr/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) » et « [Utilisation de secrets dans GitHub Actions](/fr/actions/security-guides/using-secrets-in-github-actions) ».\n\n### Exemple de flux de travail\n\nCet exemple stocke le secret `GITHUB_TOKEN` dans la variable d’environnement `NODE_AUTH_TOKEN`. Lorsque l’action `setup-node` crée un fichier `.npmrc`, elle référence le jeton provenant de la variable d’environnement `NODE_AUTH_TOKEN`.\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@v4\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\nL’action `setup-node` crée un fichier `.npmrc` sur le runner. Lorsque vous utilisez l’entrée `scope` de l’action `setup-node`, le fichier `.npmrc` inclut le préfixe de portée. Par défaut, l’action `setup-node` définit la portée dans le fichier `.npmrc` sur le compte qui contient le fichier de workflow.\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## Publication de packages avec Yarn\n\nSi vous utilisez le gestionnaire de package Yarn, vous pouvez installer et publier des packages à l’aide de Yarn.\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@v4\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\nPour vous authentifier auprès du registre lors de la publication, assurez-vous que votre jeton d’authentification est également défini dans votre fichier `yarnrc.yml`. Pour plus d’informations, consultez l’article [Paramètres](https://yarnpkg.com/configuration/yarnrc#npmAuthToken) dans la documentation Yarn."}