Skip to main content

Publicar paquetes Node.js

Puedes publicar paquetes Node.js en un registro como parte de tu flujo de trabajo de integración continua (CI).

Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.

Introducción

Esta guía te muestra cómo crear un flujo de trabajo que publique paquetes Node.js en el Registro del paquete de GitHub y registros npm después de que se aprueben las pruebas de integración continua (CI).

Prerrequisitos

Te recomendamos que tengas una comprensión básica de las opciones de configuración de flujo de trabajo y cómo crear un archivo de flujo de trabajo. Para obtener más información, consulta la sección "Aprende sobre GitHub Actions".

Para obtener más información acerca de la creación de un flujo de trabajo de CI para tu proyecto Node.js, consulta "Usar Node.js con las GitHub Actions".

También puede ser útil tener un entendimiento básico de lo siguiente:

Acerca de la configuración del paquete

Los campos Nombre y Versión en el archivo package.json crean un identificador único que los registros usan para vincular tu paquete a un registro. Puedes agregar un resumen para la página de descripción del paquete al incluir un campo Descripción en el archivo package.json. Para obtener más información, consulta "Crear un archivo package.json y Crear módulos Node.js"en la documentación de npm.

Cuando existe un archivo .npmrc local y tiene un valor especificado de registro, el comando npm publish usa el registro configurado en el archivo .npmrc. Puedes utilizar la acción setup-node para crear un archivo local de tipo .npmrc en el ejecutor que configura el registro y alcance predeterminados. La acción setup-node también acepta un token de autenticación como entrada, el cual se utiliza para acceder a los registros privados o paquetes de nodo publicados. Para obtener más información, consulta la sección setup-node.

Puedes especificar la versión de Node.js instalada en el ejecutor utilizando la acción setup-node.

Si agregas pasos en tu flujo de trabajo para configurar los campos publishConfig en tu archivo package.json, no es necesario que especifiques la Url del registro utilizando la acción setup-node, pero se limitará a publicar el paquete en un registro. Para obtener más información, consulta "publishConfig" en la documentación de npm.

Publicar paquetes en el registro npm

Cada vez que creas un lanzamiento nuevo, puedes desencadenar un flujo de trabajo para publicar tu paquete. El flujo de trabajo en el ejemplo a continuación se ejecuta cuando el evento lanzamiento desencadena con tipo creado. El flujo de trabajo publica el paquete en el registro npm si se pasan las pruebas de CI.

Para realizar operaciones autenticadas frente al registro npm en tu flujo de trabajo, necesitarás almacenar tu token de autenticación npm como un secreto. Por ejemplo, crea un repositorio secreto que se llame NPM_TOKEN. Para más información, consulta "Crear y usar secretos cifrados."

Predeterminadamente, npm utiliza el campo name del archivo package.json para determinar el nombre de tu paquete publicado. Al publicar en un espacio de nombres global, solo necesitas incluir el nombre del paquete. Por ejemplo, publicarías un paquete llamado npm-hello-world-test en https://www.npmjs.com/package/npm-hello-world-test.

Si estás publicando un paquete que incluye un prefijo de alcance, incluye el ámbito en el nombre de tu archivo package.json. Por ejemplo, si el prefijo del ámbito npm es octocat y el nombre del paquete es hello-world, el nombre en tu archivo package.json debe ser @octocat/hello-world. Si su paquete npm usa un prefijo de ámbito y el paquete es público, debes usar la opción npm publish --access public. Esta es una opción que npm requiere para evitar que alguien publique un paquete privado involuntariamente.

Este ejemplo almacena el secreto NPM_TOKEN en la variable de entorno NODE_AUTH_TOKEN. Cuando la acción setup-node crea un archivo .npmrc, hace referencia al token de la variable de entorno NODE_AUTH_TOKEN.

YAML
name: Publish Package to npmjs
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v3
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

En el ejemplo anterior, la acción setup-node crea un archivo .npmrc en el ejecutor con el siguiente contenido:

//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
registry=https://registry.npmjs.org/
always-auth=true

Toma en cuenta que necesitas configurar la registry-url como https://registry.npmjs.org/ en setup-node para configurar tus credenciales de forma adecuada.

Sube paquetes al Registro del paquete de GitHub

Cada vez que creas un lanzamiento nuevo, puedes desencadenar un flujo de trabajo para publicar tu paquete. El flujo de trabajo del siguiente ejemplo se ejecuta cada vez que se produce el evento release con tipo created. El flujo de trabajo publica el paquete en el Registro del paquete de GitHub si se superan las pruebas de CI.

Configurar el repositorio de destino

Si no proporcionas la clave del repository en tu archivo package.json, entonces el Registro del paquete de GitHub publicará un paquete en el repositorio de GitHub que especifiques en el campo name del archivo package.json. Por ejemplo, un paquete denominado @my-org/test se publicará en el repositorio my-org/test de GitHub.

Sin embargo, si no proporcionas la clave del repository, entonces el repositorio en esa clave se utilizará como el registro de npm de destino para el Registro del paquete de GitHub. Por ejemplo, el publicar el siguiente package.json dará como resultado un paquete denominado my-amazing-package que se publicará en el repositorio octocat/my-other-repo de GitHub.

{
  "name": "@octocat/my-amazing-package",
  "repository": {
    "type": "git",
    "url": "https://github.com/octocat/my-other-repo.git"
  },

Autenticarse en el repositorio de destino

Para realizar operaciones autenticadas contra el registro Registro del paquete de GitHub en tu flujo de trabajo, puedes utilizar el GITHUB_TOKEN. El secreto de GITHUB_TOKEN se configuro para un token de acceso para el repositorio cada vez que comienza un job en un flujo de trabajo. Debes configurar los permisos para este token de acceso en el archivo de flujo de trabajo para otorgar acceso de lectura para el alcance contents y de escritura para el alcance packages. Para obtener más información, consulta "Autenticar con el GITHUB_TOKEN".

Si quieres publicar tu paquete en un repositorio diferente, debes utilizar un token de acceso personal (PAT) que tenga permisos de escritura en los paquetes del repositorio destino. Para obtener más información, consulta las secciones "Crear un token de acceso personal" y "Secretos cifrados".

Ejemplo de flujo de trabajo

Este ejemplo almacena el secreto GITHUB_TOKEN en la variable de entorno NODE_AUTH_TOKEN. Cuando la acción setup-node crea un archivo .npmrc, hace referencia al token de la variable de entorno NODE_AUTH_TOKEN.

YAML
name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest 
    permissions: 
      contents: read
      packages: write 
    steps:
      - uses: actions/checkout@v3
      # Setup .npmrc file to publish to GitHub Packages
      - uses: actions/setup-node@v3
        with:
          node-version: '16.x'
          registry-url: 'https://npm.pkg.github.com'
          # Defaults to the user or organization that owns the workflow file
          scope: '@octocat'
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

La acción setup-node crea un archivo .npmrc en el ejecutor. Cuando utilizas la entrada scope a la acción setup-node, el archivo .npmrc incluye el prefijo de alcance. Por defecto, la acción setup-node establece el ámbito en el archivo .npmrc en la cuenta que contiene ese archivo de flujo de trabajo.

//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://npm.pkg.github.com
always-auth=true

Publicar paquetes mediante yarn

Si usas el gestor de paquetes Yarn, puedes instalar y publicar paquetes mediante Yarn.

YAML
name: Publish Package to npmjs
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      # Setup .npmrc file to publish to npm
      - uses: actions/setup-node@v3
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
          # Defaults to the user or organization that owns the workflow file
          scope: '@octocat'
      - run: yarn
      - run: yarn publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}