{"meta":{"title":"Publicar paquetes Node.js","intro":"En este tutorial, aprenderás a publicar paquetes de Node.js en un registro como parte de tu flujo de trabajo de integración continua (CI).","product":"GitHub Actions","breadcrumbs":[{"href":"/es/enterprise-cloud@latest/actions","title":"GitHub Actions"},{"href":"/es/enterprise-cloud@latest/actions/tutorials","title":"Tutoriales"},{"href":"/es/enterprise-cloud@latest/actions/tutorials/publish-packages","title":"Publicar paquetes"},{"href":"/es/enterprise-cloud@latest/actions/tutorials/publish-packages/publish-nodejs-packages","title":"Publicación de paquetes Node.js"}],"documentType":"article"},"body":"# Publicar paquetes Node.js\n\nEn este tutorial, aprenderás a publicar paquetes de Node.js en un registro como parte de tu flujo de trabajo de integración continua (CI).\n\n## Introducción\n\nEsta guía te muestra cómo crear un flujo de trabajo que publique paquetes Node.js en el GitHub Packages y registros npm después de que se aprueben las pruebas de integración continua (CI).\n\n## Prerrequisitos\n\nRecomendamos que tengas un conocimiento básico de las opciones de configuración de flujo de trabajo y de cómo crear un archivo de flujo de trabajo. Para más información, consulta [Escritura de flujos de trabajo](/es/enterprise-cloud@latest/actions/learn-github-actions).\n\nPara obtener más información sobre la creación de un flujo de trabajo CI para tu proyecto Node.js, consulta [Crear y probar en Node.js](/es/enterprise-cloud@latest/actions/automating-builds-and-tests/building-and-testing-nodejs).\n\nTambién puede ser útil tener un entendimiento básico de lo siguiente:\n\n* [Gestionar el registro de npm](/es/enterprise-cloud@latest/packages/working-with-a-github-packages-registry/working-with-the-npm-registry)\n* [Almacenamiento de información en variables](/es/enterprise-cloud@latest/actions/learn-github-actions/variables)\n* [Uso de secretos en Acciones de GitHub](/es/enterprise-cloud@latest/actions/security-guides/using-secrets-in-github-actions)\n* [Uso de GITHUB\\_TOKEN para la autenticación en flujos de trabajo](/es/enterprise-cloud@latest/actions/security-guides/automatic-token-authentication)\n\n## Acerca de la configuración del paquete\n\nLos campos `name` y `version` del archivo `package.json` crean un identificador único que los registros usan para vincular el paquete a un registro. Puedes agregar un resumen para la página de lista de paquetes mediante la inclusión de un campo `description` en el archivo `package.json`. Para más información, consulta [Creación de un archivo package.json](https://docs.npmjs.com/creating-a-package-json-file) y [Creación de módulos de Node.js](https://docs.npmjs.com/creating-node-js-modules) en la documentación de npm.\n\nCuando existe un archivo `.npmrc` local y tiene un valor `registry` especificado, el comando `npm publish` usa el registro configurado en el archivo `.npmrc`. Puedes usar la acción `setup-node` para crear un archivo `.npmrc` local en el ejecutor que configure el registro y el ámbito predeterminados. La acción `setup-node` también acepta un token de autenticación como entrada, que se usa para acceder a los registros privados o publicar paquetes de nodos. Para más información, vea [`setup-node`](https://github.com/actions/setup-node/).\n\nPuede especificar la versión de Node.js instalada en el ejecutor mediante la acción `setup-node`.\n\nSi agregas pasos en el flujo de trabajo para configurar los campos `publishConfig` del archivo `package.json`, no es necesario especificar la URL de registro mediante la acción  `setup-node`, pero estarás limitado a publicar el paquete en un solo registro. Para más información, consulta [publishConfig](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#publishconfig) en la documentación de npm.\n\n## Publicar paquetes en el registro npm\n\nPuedes desencadenar un flujo de trabajo para publicar tu paquete cada vez que publiques un lanzamiento nuevo. El proceso del ejemplo siguiente se ejecuta cuando se desencadena el evento de lanzamiento de tipo `published`. Si se superan las pruebas de CI, el proceso carga el paquete en el registro npm. Para más información, consulta [Administrar lanzamientos en un repositorio](/es/enterprise-cloud@latest/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release).\n\nPara 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, cree un secreto de repositorio denominado `NPM_TOKEN`. Para más información, consulta [Uso de secretos en Acciones de GitHub](/es/enterprise-cloud@latest/actions/security-guides/using-secrets-in-github-actions).\n\nDe manera predeterminada, npm usa el campo `name` del archivo `package.json` para determinar el nombre del paquete publicado. Al publicar en un espacio de nombres global, solo necesitas incluir el nombre del paquete. Por ejemplo, publicaría un paquete denominado `my-package` en `https://www.npmjs.com/package/my-package`.\n\nSi vas a publicar un paquete que incluye un prefijo de ámbito, incluya el ámbito en el nombre del archivo `package.json`. Por ejemplo, si el prefijo de ámbito de npm es \"octocat\" y el nombre del paquete es \"hello-world\", `name` en el archivo `package.json` debe ser `@octocat/hello-world`. Si en el paquete npm se usa un prefijo de ámbito y el paquete es público, tendrá que 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.\n\nSi desea publicar su paquete con procedencia, incluya la marca `--provenance` con el comando `npm publish`. Esto le permite establecer de manera pública y verificable dónde y cómo se compiló el paquete, lo que aumenta la seguridad de la cadena de suministro para las personas que consumen el paquete. Para obtener más información, consulte [Generación de declaraciones de procedencia](https://docs.npmjs.com/generating-provenance-statements) en la documentación de npm.\n\nEn este ejemplo se 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`.\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\nEn el ejemplo anterior, la acción `setup-node` crea un archivo `.npmrc` en el ejecutor con el contenido siguiente:\n\n```shell\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\nregistry=https://registry.npmjs.org/\nalways-auth=true\n```\n\nTenga en cuenta que debe establecer `registry-url` en `https://registry.npmjs.org/` en `setup-node` para configurar correctamente las credenciales.\n\n## Sube paquetes al GitHub Packages\n\nPuedes desencadenar un flujo de trabajo para publicar tu paquete cada vez que publiques un lanzamiento nuevo. El proceso del ejemplo siguiente se ejecuta cuando se desencadena el evento de lanzamiento de tipo `published`. Si se superan las pruebas de CI, el proceso carga el paquete en el GitHub Packages. Para más información, consulta [Administrar lanzamientos en un repositorio](/es/enterprise-cloud@latest/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release).\n\n### Configurar el repositorio de destino\n\nVincular tu paquete a GitHub Packages con la clave `repository` es opcional. Si decides no proporcionar la clave `repository` en el archivo `package.json`, el paquete no se vinculará a un repositorio cuando se publique, pero puedes optar por conectar el paquete a un repositorio más adelante.\n\nSi proporcionas la clave `repository` en tu archivo `package.json`, el repositorio en esa clave se utilizará como el registro npm de destino para GitHub Packages. Por ejemplo, publicar lo siguiente `package.json` da como resultado un paquete denominado `my-package`, publicado en el repositorio `octocat/my-other-repo` de 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### Autenticarse en el repositorio de destino\n\nPara realizar operaciones autenticadas en el registro GitHub Packages en el flujo de trabajo, puede usar `GITHUB_TOKEN`. El secreto `GITHUB_TOKEN` se establece en un token de acceso para el repositorio cada vez que comienza un trabajo en un flujo de trabajo. Debes establecer los permisos para este token de acceso en el archivo del flujo de trabajo a fin de conceder acceso de lectura al permiso `contents` y acceso de escritura al permiso `packages`. Para más información, consulta [Uso de GITHUB\\_TOKEN para la autenticación en flujos de trabajo](/es/enterprise-cloud@latest/actions/security-guides/automatic-token-authentication).\n\nSi quieres publicar tu paquete en un repositorio diferente, debes usar un personal access token (classic) que tenga permisos de escritura en los paquetes del repositorio destino. Para más información, consulta [Administración de tokens de acceso personal](/es/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) y [Uso de secretos en Acciones de GitHub](/es/enterprise-cloud@latest/actions/security-guides/using-secrets-in-github-actions).\n\n### Flujo de trabajo de ejemplo\n\nEn este ejemplo se 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`.\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\nLa acción `setup-node` crea un archivo `.npmrc` en el ejecutor. Cuando se usa la entrada `scope` en la acción `setup-node`, el archivo `.npmrc` incluye el prefijo de ámbito. De manera predeterminada, la acción `setup-node` establece el ámbito en el archivo `.npmrc` para la cuenta que contiene dicho archivo de flujo de trabajo.\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## Publicar paquetes mediante Yarn\n\nSi usas el gestor de paquetes Yarn, puedes instalar y publicar paquetes mediante 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\nPara autenticarse con el registro durante la publicación, asegúrate de que el token de autenticación también esté definido en el archivo `yarnrc.yml`. Para obtener más información, consulta el artículo [Configuración](https://yarnpkg.com/configuration/yarnrc#npmAuthToken) en la documentación de Yarn."}