JavaScript

Incluir el número de versión con Webpack

Recientemente se ha publicado una serie en la que se explicaba cómo se puede crear una librería JavaScript en Node usando para ellos TypeScript. Serie que complementa la publicada hace unos años acerca de cómo crear una librería en JavaScript. Algo que puede ser de interés a la hora de publicar librerías es incluir en las mismas el número de versión y otra información relativa a la compilación de forma automática. En el caso de trabajar con Webpack, como es el caso de la plantilla tslane, esto es algo que se puede realizar fácilmente con un par de ajustes. Por lo que vamos a ver como incluir en la plantilla tslane el número de versión con Webpack.

En esta entrada vamos a continuar trabajando con la plantilla tslane que se desarrolló en la serie “Creación de una librería TypeScript“. Plantilla que se puede descargar desde GitHub.

Definición de constantes globales en Webpack

Para incluir el número de versión automáticamente al compilar la liberara con Webpack vamos a usar el plugin DefinePlugin. Un plugin que permite crear constantes globales que se pueden configurar en tiempo de compilación. Para ello abriremos el archivo webpack.config.js y crearemos un objeto como el siguiente en el que se guardará el número de versión y el hash del repositorio:

const definePlugin = new webpack.DefinePlugin({
  VERSION: JSON.stringify(package.version),
  HASH: JSON.stringify(commitHash)
});

En el que se creará un objeto DefinePlugin con las propiedades VERSION y HASH. El número de versión se puede obtener del archivo package.json sin mayor problema, mientras que el hash del repositorio se puede obtener con el siguiente código:

const commitHash = require('child_process')
  .execSync('git rev-parse --short HEAD')
  .toString();

Estos valores serán constantes globales cuyos valores se obtienen en el momento de compilación. Al incluir estos cambios, el archivo webpack.config.js del proyecto quedará de la siguiente forma:

const path = require('path');
const webpack = require('webpack');

const package = require('./package.json');
const library = package.name;
const filename = `${package.name}_${package.version}.js`;
const mapname = `${package.name}_map_${package.version}.js`;

const commitHash = require('child_process')
  .execSync('git rev-parse --short HEAD')
  .toString();

const definePlugin = new webpack.DefinePlugin({
  VERSION: JSON.stringify(package.version),
  HASH: JSON.stringify(commitHash)
});

module.exports = [{
    name: 'map',
    entry: './src/index.ts',
    devtool: 'inline-source-map',
    mode: 'production',
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: 'ts-loader',
                exclude: /node_modules/
            },
        ],
    },
    resolve: {
        extensions: ['.tsx', '.ts', '.js'],
    },
    output: {
        filename: mapname,
        library: library,
        path: path.resolve(__dirname, 'bundles'),
    }
}, {
    name: 'production',
    entry: './src/index.ts',
    mode: 'production',
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: 'ts-loader',
                exclude: /node_modules/
            },
        ],
    },
    resolve: {
        extensions: ['.tsx', '.ts', '.js'],
    },
    output: {
        filename: filename,
        library: library,
        path: path.resolve(__dirname, 'bundles'),
    },
    plugins: [definePlugin]
}];

Exportación del número de versión

En el caso de que queramos exportar los valores se puede ir al archivo index.ts y crear un objeto que se exportará. Por ejemplo, un objeto version con las propiedades indicadas.

declare const VERSION: string;
declare const HASH: string;
 
export const version = {
  version: VERSION,
  build: HASH
};

Es importante declarar las constantes antes de usarlas para que produzca ningún error a la hora de compilar el código. Ahora una vez generado el archivo compilado se puede acceder al número de versión el hash utilizando la propiedad version que se encuentra disponible en la librería.

Conclusiones

En esta ocasión hemos visto cómo se puede automatizar la inclusión del número de versión con Webpack en nuestros proyectos TypeScript. Aunque el truco se puede usar sin problemas también en JavaScript sin muchos cambios.

El proyecto completo y actualizado se pude descargar desde su repositorio.

Imagen de Albrecht Fietz en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Curiosidad: La Paradoja de Simpson, o por qué no siempre debes fiarte de los promedios

En ciencia de datos y estadística, los promedios y porcentajes son herramientas fundamentales para resumir…

1 día ago

Copias de seguridad automáticas en SQL Server con rotación de archivos

Las bases de datos son el corazón de casi cualquier sistema de información moderno. Ya…

3 días ago

Curiosidad: La Ley de Twyman y la trampa de los datos “interesantes”

En ciencia de datos, pocas cosas llaman más la atención de los científicos de datos…

1 semana ago

Cómo calcular el tamaño de la muestra para encuestas

Calcular adecuadamente el tamaño de la muestra es una parte esencial en el diseño de…

1 semana ago

Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey

Hoy en día, cuando pensamos en ciencia de datos, lo primero que nos viene a…

2 semanas ago

Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM

Ampliar el espacio de almacenamiento en un sistema Linux es una tarea habitual y crítica…

2 semanas ago

This website uses cookies.