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.
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] }];
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.
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
En ciencia de datos y estadística, los promedios y porcentajes son herramientas fundamentales para resumir…
Las bases de datos son el corazón de casi cualquier sistema de información moderno. Ya…
En ciencia de datos, pocas cosas llaman más la atención de los científicos de datos…
Calcular adecuadamente el tamaño de la muestra es una parte esencial en el diseño de…
Hoy en día, cuando pensamos en ciencia de datos, lo primero que nos viene a…
Ampliar el espacio de almacenamiento en un sistema Linux es una tarea habitual y crítica…
This website uses cookies.