Mostrar la versión desde package.json en SvelteKit
Atención: este artículo ha sido actualizado para tener en cuenta los cambios importantes en la API de SvelteKit a partir de su versión @sveltejs/[email protected]
y [email protected]
.
Otro de esos artículos que voy a escribir porque siempre se me olvida cómo hacer esto y tengo que volver a buscarlo.
En parte como dicen los docs de SvelteKit en su ejemplo. Pero con un par de añadidos para hacerlo funcionar y evitar avisos.
Cómo importar la versión
En el archivo vite.config.js
, añadir lo siguiente:
import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
const file = fileURLToPath(new URL('package.json', import.meta.url));
const json = readFileSync(file, 'utf8');
const pkg = JSON.parse(json);
const config = {
// ...
define: {
__APP_VERSION__: JSON.stringify(pkg.version),
},
// ...
};
// ...
Puedes llamarlo __APP_VERSION__
, __VERSION__
, o como tú prefieras.
Recuerda reiniciar tu app tras hacer cambios en vite.config.js
.
Cómo mostrar la versión
Y para usarlo donde quieras en tu app:
<h2>Versión: {__APP_VERSION__}</h2>
Así Vite, al montar tu app, reemplazará esa cadena por la versión importada desde package.json
. Es exactamente así como lo hago en este blog, para mostrar la versión en el footer
.
Nada es tan sencillo: quejas y problemas
Ahora bien, si usas el plugin de svelte para eslint
, o si usas TS
, es posible que empieces a ver quejas:
Meh… 😕
La mejor forma que encontré para quitar el primer aviso (del plugin de eslint
) es añadir lo siguiente en la línea anterior:
<!-- svelte-ignore missing-declaration -->
<h2>Versión: {__APP_VERSION__}</h2>
Listo. Lo sé, no es el mejor sistema, pero cumple. Si tienes una idea mejor, soy todo oídos.
Para solucionar el error de TS
, en lugar de añadir // @ts-ignore
, mejor declarar el tipo y listo.
En el archivo /src/app.d.ts
que SvelteKit suele generar cuando empiezas un nuevo proyecto con TypeScript activado, añade la siguiente línea:
// ...
declare const __APP_VERSION__: string;
Listo, ahora TS
reconoce la cadena __APP_VERSION__
y no vuelve a quejarse.
Todo esto más o menos lo he sacado de la pregunta que respondí en SO sobre el tema, y los comentarios derivados.
Como te decía, si tienes una idea mejor o ha cambiado la cosa desde que lo escribí, puedes responder en la misma pregunta o escribirme!
No hay sección de comentarios, pero me encantaría escuchar tu opinión: escríbeme en Twitter y cuéntame!