@asilla3dr/componentes v0.1.0
Creación de una Biblioteca de Componentes con Vue 3 y Vite
Esta documentación describe el proceso de creación de una biblioteca de componentes personalizada con Vue 3 y Vite. Documentación de la Librería de Componentes
Índice
- Configuración inicial del proyecto
- Estructura de carpetas
- Configuración para la biblioteca
- Creación de componentes
- Exportación de componentes
- Proceso de build
- Cómo usar la biblioteca
- Ejemplos de componentes
- Desarrollo local con npm link
1. Configuración inicial del proyecto
Comenzamos creando un nuevo proyecto Vue 3 con su CLI oficial:
npm create vue@latest vue3-libreria
cd vue3-libreria
npm install2. Estructura de carpetas
Para mantener nuestros componentes organizados, utilizamos la siguiente estructura:
vue3-libreria/
├── src/
│ ├── components/
│ │ ├── Button/
│ │ │ ├── Button.vue
│ │ │ └── index.js
│ │ ├── Card/
│ │ │ ├── Card.vue
│ │ │ └── index.js
│ │ └── index.js
│ └── lib.js
├── vite.config.js
└── package.jsonCada componente tiene su propia carpeta para mantener una buena organización y facilitar la expansión futura.
3. Configuración para la biblioteca
Configuración del package.json
Modificamos el package.json para indicar que estamos construyendo una biblioteca:
{
"name": "vue3-libreria",
"version": "0.1.0",
"private": true,
"type": "module",
"main": "./dist/vue3-libreria.umd.js",
"module": "./dist/vue3-libreria.es.js",
"exports": {
".": {
"import": "./dist/vue3-libreria.es.js",
"require": "./dist/vue3-libreria.umd.js"
},
"./style.css": "./dist/vue3-libreria.css"
},
"files": [
"dist"
],
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"test:unit": "vitest"
},
"dependencies": {
"vue": "^3.2.0",
},
"peerDependencies": {
"vue": "^3.2.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.2.3",
"@vue/test-utils": "^2.4.6",
"jsdom": "^26.0.0",
"sass": "^1.86.3",
"vite": "^6.2.4",
"vite-plugin-vue-devtools": "^7.7.2",
"vitest": "^3.1.1"
}
}Configuración de Vite
Configuramos vite.config.js para construir nuestra biblioteca:
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)) // Alias para facilitar las importaciones desde src
}
},
build: {
lib: {
// Asegúrate de que el archivo de entrada esté bien configurado
entry: fileURLToPath(new URL('./src/lib.js', import.meta.url)), // Asegúrate de que este archivo existe
name: 'Vue3Libreria',
fileName: (format) => `vue3-libreria.${format}.js` // Genera archivos como vue3-libreria.umd.js y vue3-libreria.es.js
},
rollupOptions: {
external: ['vue'], // Excluye Vue, ya que debe ser proporcionado por el proyecto que use la librería
output: {
globals: {
vue: 'Vue' // Asegura que Vue sea globalmente accesible cuando se use en el navegador
},
exports: 'named' // Utiliza exportaciones nombradas para permitir importaciones selectivas
}
}
}
})4. Creación de componentes
Creamos componentes autocontenidos con estilos encapsulados usando la directiva scoped.
Cada componente incluye:
- Template para la estructura HTML
- Script para la lógica y propiedades
- Estilos encapsulados con
scoped
5. Exportación de componentes
Punto de entrada de la biblioteca (lib.js)
Creamos el archivo principal de nuestra biblioteca:
// src/lib.js
import * as components from './components'
// Función de instalación para Vue.use()
const install = (app) => {
Object.entries(components).forEach(([componentName, component]) => {
app.component(componentName, component)
})
}
export default { install }
// Exportar componentes individualmente
export * from './components'6. Proceso de build
Para compilar la biblioteca, ejecutamos:
npm run buildEsto generará los archivos en la carpeta dist/:
vue3-libreria.es.js- Versión ESM (para importaciones modernas)vue3-libreria.umd.js- Versión UMD (para uso con etiquetas script)vue3-libreria.css- Estilos compilados
7. Cómo usar la biblioteca
Para usar la biblioteca en un proyecto Vue, tienes dos opciones principales:
Opción 1: Registrar toda la biblioteca
// main.js
import { createApp } from 'vue'
import App from './App.vue'
// Importar la biblioteca completa
import Vue3Libreria from 'vue3-libreria'
// Importar los estilos (¡muy importante!)
import 'vue3-libreria/style.css'
const app = createApp(App)
// Registrar todos los componentes globalmente
app.use(Vue3Libreria)
app.mount('#app')Opción 2: Importar componentes individuales
// main.js
import { createApp } from 'vue'
import App from './App.vue'
// Importar componentes específicos
import { Button, Card } from 'vue3-libreria'
// Importar los estilos (¡muy importante!)
import 'vue3-libreria/style.css'
const app = createApp(App)
// Registrar componentes individualmente
app.component('Button', Button)
app.component('Tarjeta', Card) // Puedes usar nombres diferentes si lo deseas
app.mount('#app')8. Ejemplos de componentes
Usando el componente Button
<template>
<div>
<Button primary>Botón Principal</Button>
<Button danger>Eliminar</Button>
<Button size="large">Botón Grande</Button>
</div>
</template>Usando el componente Card
<template>
<div>
<Card
title="Tarjeta de ejemplo"
subtitle="Subtítulo opcional"
variant="primary"
shadow
hover
>
<p>Este es el contenido principal de la tarjeta.</p>
<template #footer>
<div class="card-actions">
<Button size="small">Aceptar</Button>
<Button size="small" variant="danger">Cancelar</Button>
</div>
</template>
</Card>
</div>
</template>9. Desarrollo local con npm link
Durante el desarrollo, es conveniente probar la biblioteca en un proyecto real sin necesidad de publicarla en npm. Para esto, utilizamos npm link:
Paso 1: Crear un enlace simbólico en la biblioteca
Primero, navega al directorio de tu biblioteca y crea un enlace simbólico global:
# En el directorio de tu biblioteca (vue3-libreria)
cd /ruta/a/vue3-libreria
npm linkEsto registra la biblioteca en el registro npm local.
Paso 2: Vincular la biblioteca en tu proyecto de prueba
Ahora, ve a tu proyecto donde quieres usar la biblioteca y crea un enlace a la misma:
# En el directorio de tu proyecto de prueba
cd /ruta/a/mi-proyecto
npm link vue3-libreriaPaso 3: Compilar la biblioteca en modo watch (opcional)
Para ver los cambios en tiempo real mientras desarrollas, puedes configurar un script en package.json de tu biblioteca:
"scripts": {
"dev": "vite",
"build": "vite build",
"build:watch": "vite build --watch",
"preview": "vite preview"
}Y luego ejecutarlo:
npm run build:watchPaso 4: Importar correctamente en tu proyecto
En tu proyecto de prueba, asegúrate de importar correctamente los componentes y los estilos:
// main.js
import { createApp } from 'vue'
import App from './App.vue'
// Importar componentes
import { Button, Card } from 'vue3-libreria'
// Importar estilos (¡crucial!)
import 'vue3-libreria/style.css'
const app = createApp(App)
app.component('Button', Button)
app.component('Tarjeta', Card)
app.mount('#app')Paso 5: Desenlazar cuando ya no sea necesario
Cuando hayas terminado de desarrollar, puedes eliminar los enlaces:
# En tu proyecto de prueba
npm unlink vue3-libreria
# En el directorio de tu biblioteca
npm unlink10. Publicación en Bitbucket e instalación desde repositorios
Preparación para publicación en Bitbucket
Cuando desarrolles una biblioteca que quieras compartir a través de Bitbucket, es esencial modificar el archivo .gitignore para incluir la carpeta dist/. Por defecto, las plantillas de Vue suelen ignorar esta carpeta, pero necesitamos incluirla para que otros puedan instalar la biblioteca directamente desde Bitbucket.
Modifica tu archivo .gitignore y asegúrate de quitar o comentar la línea que excluye dist:
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
# dist <- Elimina o comenta esta línea
dist-ssr
coverage
*.localCrear un repositorio en Bitbucket y subir el código
# Inicializa git si aún no lo has hecho
git init
# Añade todos los archivos
git add .
# Haz el primer commit
git commit -m "Versión inicial de la biblioteca de componentes"
# Conecta con tu repositorio remoto (reemplaza la URL con la de tu repositorio)
git remote add origin https://asilla1@bitbucket.org/3dr-dev/componentes.git
# Sube los cambios
git push -u origin mainInstalación desde Bitbucket
Para instalar la biblioteca directamente desde Bitbucket en otro proyecto, usa:
# Para repositorios públicos
npm install git+https://asilla1@bitbucket.org/3dr-dev/componentes.gitSi el repositorio es privado y necesitas incluir las credenciales:
# Con usuario y contraseña
npm install git+https://asilla1:tu_contraseña@bitbucket.org/3dr-dev/componentes.git
# Alternativa usando SSH (más seguro)
npm install git+ssh://git@bitbucket.org/3dr-dev/componentes.gitEsto descargará la biblioteca desde Bitbucket e instalará los archivos según la configuración en tu package.json.
Importación y uso después de instalar desde Bitbucket
La importación funciona igual que con cualquier otra instalación:
// main.js
import { createApp } from 'vue'
import App from './App.vue'
// Importar componentes
import { Button, Card } from 'vue3-libreria'
// Importar estilos
import 'vue3-libreria/style.css'
const app = createApp(App)
app.component('Button', Button)
app.component('Tarjeta', Card)
app.mount('#app')Solución de problemas comunes al instalar desde Bitbucket
Si encuentras errores al instalar desde Bitbucket, verifica:
La carpeta
dist/está incluida en el repositorio: Asegúrate de que modificaste el.gitignorey subiste los archivos compilados.El
package.jsonestá correctamente configurado: Revisa los camposmain,moduleyexports.No hay dependencia circular: Elimina cualquier auto-referencia en las dependencias como
"vue3-libreria": "file:".La versión de Vue es compatible: Asegúrate de que las versiones de Vue sean compatibles entre la biblioteca y el proyecto que la usa.
Problemas de autenticación: Si tienes problemas de acceso a un repositorio privado, considera usar SSH en lugar de HTTPS, o asegúrate de que tus credenciales sean correctas.
Caracteres especiales en correos electrónicos: Si tu nombre de usuario es un correo electrónico (como asilla@3drender.es), es posible que necesites codificar el @ como %40:
npm install git+https://asilla%403drender.es@bitbucket.org/3dr-dev/componentes.git
6 months ago