Publica en NPM
¿Construyendo un nuevo componente Astro? ¡Publícalo en npm!
Publicar un componente de Astro es una excelente manera de reutilizar tu trabajo y compartirlo con la comunidad de Astro. Los componentes de Astro se pueden publicar e instalar directamente desde NPM, como cualquier otro paquete de JavaScript.
¿Buscas inspiración? Mira algunos de nuestros temas y componentes favoritos de la comunidad de Astro. También puedes buscar en npm para ver el catálogo completo.
Consulta nuestra plantilla de componente de Astro para obtener una plantilla lista para usar y mantenida por nuestra comunidad.
Inicio rápido
Sección titulada Inicio rápidoPara comenzar a desarrollar tu componente rápidamente, puedes utilizar una plantilla que ya está configurada para ti.
Creando un paquete
Sección titulada Creando un paqueteAntes de empezar, será útil tener una comprensión básica de:
Para crear un nuevo paquete, configura tu entorno de desarrollo para utilizar Workspaces dentro de tu proyecto. Esto te permitirá desarrollar tu componente junto con una copia funcional de Astro.
Directorymy-new-component-directory/
Directorydemo/
- … para pruebas y demostraciones
- package.json
Directorypackages/
Directorymy-component/
- index.js
- package.json
- … archivos adicionales utilizados por el paquete
Este ejemplo, llamado mi-proyecto
, crea un proyecto con un solo paquete, llamado mi-componente
, y un directorio demo/
para probar y demostrar el componente.
Esto se configura en el archivo package.json
de la raíz del proyecto:
En este ejemplo, se pueden desarrollar varios paquetes juntos desde el directorio packages
. También se puede hacer referencia a estos paquetes desde demo
, donde puedes instalar una copia funcional de Astro.
Hay dos archivos iniciales que conformarán tu paquete individual: package.json
e index.js
.
package.json
Sección titulada package.jsonEl package.json
en el directorio del paquete incluye toda la información relacionada a tu paquete, incluida su descripción, dependencias y cualquier otro metadato.
description
Sección titulada descriptionUna breve descripción de tu componente que será utilizado para ayudar a otros a saber lo que hace.
El formato del módulo utilizado por Node.js y Astro para interpretar tus archivos index.js
.
Utiliza "type": "module"
para que index.js
se pueda usar como un punto de entrada con import
y export
.
homepage
Sección titulada homepageLa URL de la página de inicio del proyecto.
Esta es una excelente manera de dirigir a los usuarios a una demostración en línea, documentación o página de inicio de tu proyecto.
exports
Sección titulada exportsLos puntos de entrada de un paquete cuando se importan por nombre.
En este ejemplo, importar my-component
usaría index.js
, mientras que importar my-component/astro
o my-component/react
usaría MyAstroComponent.astro
o MyReactComponent.jsx
respectivamente.
Una optimización opcional para excluir archivos innecesarios del paquete enviado a los usuarios a través de npm. Ten en cuenta que solo los archivos enumerados aquí se incluirán en tu paquete, por lo que, si agregas o cambias los archivos necesarios para que tu paquete funcione, debes actualizar esta lista en consecuencia.
keywords
Sección titulada keywordsUna serie de palabras clave relevantes para tu componente, utilizado para ayudar a otros usuarios a encontrar tu componente en npm y en cualquier otro catálogo de búsqueda.
Agrega astro-component
o withastro
como palabra clave especial para maximizar su descubrimiento en el ecosistema de Astro.
¡Nuestra biblioteca de integraciones también utiliza palabras clave! Descubre más adelante una lista completa de las palabras clave que buscamos en NPM.
index.js
Sección titulada index.jsEl punto de entrada del paquete principal que se utiliza cada vez que se importa tu paquete.
Esto te permite empaquetar múltiples componentes juntos en una sola interfaz.
Ejemplo: Usando importaciones nombradas
Sección titulada Ejemplo: Usando importaciones nombradasEjemplo: Usando importaciones module-name
Sección titulada Ejemplo: Usando importaciones module-nameEjemplo: uso de importaciones individuales
Sección titulada Ejemplo: uso de importaciones individualesDesarrollando tu paquete
Sección titulada Desarrollando tu paqueteAstro no tiene un “modo de paquete” dedicado para el desarrollo. En su lugar, debes usar un proyecto demo para desarrollar y probar tu paquete dentro de tu proyecto. Este puede ser un sitio web privado que solo se use para desarrollo, o un sitio web público de demostración/documentación para tu paquete.
Si estás extrayendo componentes de un proyecto existente, puedes incluso continuar usando ese proyecto para desarrollar tus componentes ahora extraídos.
Probando tus componentes
Sección titulada Probando tus componentesAstro actualmente no incluye un test runner. Esto es algo que nos gustaría abordar. (Si estás interesado en ayudar con esto, ¡únete a nosotros en Discord!)
Mientras tanto, nuestra recomendación actual para las pruebas es:
- Agrega un directorio
fixtures
de prueba a su directoriodemo/src/pages
. - Agrega una nueva página para cada prueba que desee ejecutar.
- Cada página debe incluir un uso distinto de los componentes que te gustaría probar.
- Ejecuta
astro build
para construir tus fixtures, luego compara los resultados en el directoriodist/__fixtures__/
con los resultados esperados.
Directorymy-project/demo/src/pages/__fixtures__/
- test-name-01.astro
- test-name-02.astro
- test-name-03.astro
Publicando tu componente
Sección titulada Publicando tu componenteUna vez que tengas tu paquete listo, puedes publicarlo en npm utiliza el comando npm publish
para publicar tu paquete. Si falla, asegúrate de haber iniciado sesión con npm login
y de que tu archivo package.json
esté correcto. Si tiene éxito, ¡has terminado!
Es importante destacar que no hay un paso de “build” para los paquetes de Astro. Cualquier tipo de archivo que Astro admita de forma nativa, como .astro
, .ts
, .jsx
y .css
, puede ser publicado directamente sin necesidad de un paso de construcción adicional.
Si necesitas agregar otro tipo de archivo que no sea admitido de forma nativa por Astro, deberás agregar un paso de construcción a tu paquete. Este ejercicio avanzado queda a tu cargo y dependerá de tus necesidades específicas.
Biblioteca de integraciones
Sección titulada Biblioteca de integraciones¡Comparte tu arduo trabajo agregando tu integración a nuestra biblioteca de integraciones!
¿Necesitas ayuda para crear tu integración o simplemente quieres conocer a otros creadores de integraciones? Tenemos un canal dedicado #dev-integrations
en nuestro servidor de Discord. ¡Ven a saludarnos!
Datos en package.json
Sección titulada Datos en package.jsonLa biblioteca se actualiza automáticamente semanalmente, agregando todos los paquetes publicados en NPM con la palabra clave astro-component
o withastro
.
La biblioteca de integraciones lee los datos name
, description
, repository
y homepage
de tu package.json
.
¡Los avatares son una excelente manera de resaltar tu marca en la biblioteca! Una vez que se publique tu paquete, puedes crear una issue en GitHub con tu avatar adjunto y lo agregaremos al listado.
¿Necesitas anular la información que nuestra biblioteca lee de NPM? ¡No hay problema! Crea una issue con la información actualizada y nos aseguraremos de que el nombre
, la descripción
o la página de inicio
personalizados sean utilizados en su lugar.
Colecciones
Sección titulada ColeccionesAdemás de la palabra clave requerida astro-component
o withastro
, también se utilizan otras palabras clave especiales para organizar automáticamente los paquetes. Incluir cualquiera de las palabras clave a continuación agregará tu integración a la colección en nuestra biblioteca de integraciones.
colección | palabras clave |
---|---|
Accesibilidad | a11y , accessibility |
Adaptadores | astro-adapter |
Analíticas | analytics |
CSS + UI | css , ui , icon , icons , renderer |
Frameworks | renderer |
Performance + SEO | performance , perf , seo , optimization |
Comparte
Sección titulada ComparteTe alentamos a compartir tu trabajo, y realmente nos encanta ver lo que crean nuestros talentosos Astronautas. ¡Ven y comparte lo que creas con nosotros en nuestro Discord o menciona @astrodotbuild en un Tweet!
Reference