Anécdota – ‘xxxx-xxxx’ no se reconoce como comando del sistema
Fri Oct 27 2023
Vaya… El día de hoy he perdido 3.30 hrs haciendo y deshaciendo maquinas virtuales, checando permisos, probando una y otra vez… y mil y un cosas… todo para que a final de cuentas el agregar test unitarios al proyecto de una CLI en TS viniera a causar un caos… 😖😖😖😪😪😪
Contexto
Resulta que al ser Staff Manager tengo un poco más de apertura o visibilidad de los proyectos, esto porque se les hacen varias cosas entre revisiones de seguridad, se revisa el código, se busca tener un contexto acerca del estado del proyecto a nivel general y en ocasiones a un nivel un tanto más granular. Entonces entre las actividades de los últimos meses se observaron cosas que entre los proyectos son muy comunes, y no estoy hablando de fallos, errores técnicos, errores de lógica o cosas por el estilo; más bien me refiero un poco más acercado a lo que se conoce como “Guía de estilos” o “Estilo de código”, que se refiere básicamente a esas reglas o estándares que tu como líder de proyecto o equipo; definieron para, entre otras cosas; reducir la deuda técnica, seguir ciertos patrones o lineamientos, indentación, etc…
Nota:
Si, ya se que que el término “Guía de estilos”, se utiliza para referirse a literalmente los estilos o el diseño de los estilos de una pagina web, algo así como el estándar visual que deben tener ciertos componentes, características, elementos, etc.. pero para efectos prácticos se entiende creo yo.
El chiste… gracias a ello se me hizo buena idea crear una CLI (Command Line-Interface o Interfaz de linea de comandos en español), pues para poder hacer muchas cosas referente a estos detalles que me encontré entre los proyectos. La idea surgió, se presentó y en el camino algunos compañeros me comentaron que tener un recurso con los objetivos o para los fines con los cuales estaba pensando, estaría bien. Entonces sin perder tiempo, comencé el desarrollo.
A día de hoy es algo super pequeño, con lo mínimo de dependencias externas sino es que ninguna, a excepción de la dependencia del lenguaje que se requiere. Como es algo muy pequeño por el momento, ya que es la fase 1 e inicial del desarrollo, pues se decidió implementar y probar en un proyecto. (Aunque inicialmente mi idea era dejarla únicamente para los Staff y de ahí basarnos para hacer muchas cosas)
El día de hoy, hable con una compañera que está encargada del proyecto en donde se decidió implementar este módulo, de hecho ya tenia unos días de retraso porque se me había pasado comentarle 😅😅😅 ya que tenia varias tareas pendientes por realizar, entonces le mande un mensaje, acordamos como se iba a trabajar…
Credenciales
Al poco rato de que hablamos, me manda mensaje mi compañera y me dice: “Oye que crees.. que me manda este error” y con ello me manda una captura del error.
Hasta este punto era obvio y sabía que quizá pasara pero no documenté eso entonces cuando arrojo el error fue simple o sencillo saber que onda
Después ya todo fue bien, pero solo por unos minutos ya que todo fue como 🥳🥳🥳 el problema llego cuando hablando con ella, le mencioné como funcionaba la herramienta y que la probara para ver que tal iba en el proyecto.
Y ahí todo comenzó a morir 😥😥😓😓😪😪
Pruebas, pruebas y más pruebas
Aquí entro en juego el típico lema del desarrollador: “En mi local funcionaba”, porque realmente cuando lo hice, lo probé y antes de publicar funcionaba perfectamente… El fallo estuvo en un problema lógico de validación de mi parte y que en el momento no tenia cabeza para pensar acerca de la falla lógica, entonces a como pude confié en mi instinto, hice el fix y lo publiqué… le comenté del update y tan pronto como ella actualizó, me dijo que volvió a fallar. Básicamente mi fix no sirvó… Entonces paso muy rápidamente por mi cabeza en donde podía estar el error y mil y un formas de fallar se vinieron a mi cabeza entonces creo que lo mejor y más profesional que podía hacer, antes de lanzar versiones como loco y alterarme, fue decirle que necesitaba si o si: aplicar testing… Porque si no era más probable que por lo “verde” del proyecto y por lo “frágil” pues era muy riesgoso seguir…
La solución
Todo esto me llevó a pensar que dependencia de testing usar y me fuí por Vitest, por lo “sencillo” de usar, menos configuración, ya que es un proyecto solamente con Typescript. Y una vez teniéndolo; mi cabeza dejo de pensar y aunque era una cosa sencilla me llevé como 1hr a 1:30 hrs para implementar un refactor y 6 casos de prueba tan simples y tan sencillos… que la verdad me la pasé pésimo por mi desempeño, pero ya pasó y a la hora de probar por mi cuenta mi CLI ya no funcionaba 🤣😂🤣😂😡😡😭😭😱😱…
Lo más lógico que pensé hasta el momento fue: “Debe de ser por NVM”, ya que como tengo que ver varios proyectos con distintas versiones de NodeJS (el entorno de ejecución de JS fuera del navegador), pues era normal tener que cambiar la versión a cada rato, pero desafortunadamente por cuestiones de Seguridad tengo permisos y accesos restringidos para manejar a diestra y siniestra el equipo… es por ello el uso de NVM (Node Version Manager o Gestor de Versiones de NodeJS). Es por ello que instale un virtualizador para mover a necesidad las cosas… entonces probé en 2 entornos:
1.- VM con Windows
Monté un Windows 10, le metí NVM de nuevo (ignorantemente), agregué las credenciales he hice una prueba, volví a tener el mismo error… seguía sin reconocer mi CLI… cambie NVM por una versión de NodeJS y lo mismo…
2.- VM con Linux (Ubuntu especificamente)
Monté un Ubuntu 20,le metí las credenciales cree un proyecto, baje la herramienta y la probé… y el mismo error me arrojó…
En este punto, hubo una persona que me dijo: “Entre más te satures, menos vas a poder. Trata de darte un tiempo para relajarte. Ya después le sigues”… Y vaya que el hablar con esta persona siempre me calma… me tranquiliza y hace que me desconecte de todo.
Me ayudó bastante
Ya estaba a punto de mentar madres, tirar la toalla y dejarlo para el día siguiente… pero de repente se me ocurrió probar en mi maquina para ver que era lo que había cambiado y posiblemente tratar de imaginar, tipo de good doctor, que estaba pensando la maquina en el momento de mis pruebas… y he ahí que me di cuenta que el agregar los test y por una cuestión de configuración del compilador de Typescript, me estaba cambiando la estructura de salida de mi módulo…
La solución era tan sencilla y tan fácil… pero me llevó bastante encontrar que onda, ya que ni el mismo NVM o Stack Overflow o San Google me daban respuesta o camino por donde seguir…
Es hora de agregar esto tanto a documentación como a Recursos como parte de este Blog y quizá de algún otro. Porque ya perdí mucho tiempo con esto este día y me dije a mi mismo: “Esto no me vuelve a pasar”