Al crear un paquete para NPM, podrás compartir tu trabajo a varios desarrolladores e instalar tu paquete mediante npm install <tuPaquete>. Te mostraré un ejemplo, un proyecto de mensajes aleatorios que estará instalado globalmente y se ejecutará mediante la terminal.
Cómo colocar un nombre a tu paquete
Al publicar un paquete, es necesario que el nombre sea único, es decir, no debe existir ningún otro paquete publicado con el mismo nombre en NPM.
Sin embargo, no agregues números, ya que NPM lo detecta como spam. Es válido agregar tu nombre de usuario para diferenciarlo,
Asegúrate de eso buscando en la página oficial de NPM el nombre del paquete, si no hay coincidencias lo puedes publicar.
Proyecto de mensajes aleatorios
Como buena práctica, crea un repositorio remoto en GitHub y clónalo en tu computador. Después, inicia un proyecto con NPM con el comando npm init -y. Con esto ya tienes todo listo para empezar el proyecto.
Dentro del proyecto crea la siguiente estructura de archivos:
Un directorio llamado src que contenga el archivo principal del proyecto index.js
Un directorio llamado bin que contenga un archivo ejecutable global.js
Creando el archivo index.js
En el archivo index.js agrega el siguiente código:
Un array llamado messages que contiene los mensajes
Una función funnyCommit que mostrará de manera aleatoria los elementos del array, es decir, los mensajes aleatorios.
Al final, exporta la función mediante module.exports.
const messages =["This is where it all begins...","Commit committed","Version control is awful","COMMIT ALL THE FILES!","The same thing we do every night, Pinky - try to take over the world!","Lock S-foils in attack position","This commit is a lie","I'll explain when you're older!","Here be Dragons","Reinventing the wheel. Again.","This is not the commit message you are looking for","Batman! (this commit has no parents)",];constfunnyCommit=()=>{const message = messages[Math.floor(Math.random()* messages.length)];console.log(`\x1b[34m${message}\x1b[89m`);}module.exports={ funnyCommit
};
Creando el archivo global.js
En el archivo global.js agrega el siguiente código, en el que importamos el la función del archivo index.js y la ejecutamos.
#!/usr/bin/env nodelet random =require('../src/index.js');random.funnyCommit();
⠀⠀
#!/usr/bin/env node es una instrucción que sirve para indicar que este archivo se ejecutará con Nodejs. Después realizamos la importación de nuestro archivo index.js. Finalmente, ejecutamos la función de mensajes aleatorios funnyCommit.
Modificar el archivo package.json para el proyecto
⠀⠀
En el archivo package.json, agrega "bin" haciendo referencia a nuestro archivo global.js y "preferGlobal" en true.
Al crear un paquete para NPM, podrás compartir tu trabajo a varios desarrolladores e instalar tu paquete mediante npm install <tuPaquete>. Te mostraré un ejemplo, un proyecto de mensajes aleatorios que estará instalado globalmente y se ejecutará mediante la terminal.
Cómo colocar un nombre a tu paquete
Al publicar un paquete, es necesario que el nombre sea único, es decir, no debe existir ningún otro paquete publicado con el mismo nombre en NPM.
Sin embargo, no agregues números, ya que NPM lo detecta como spam. Es válido agregar tu nombre de usuario para diferenciarlo,
Asegúrate de eso buscando en la página oficial de NPM el nombre del paquete, si no hay coincidencias lo puedes publicar.
Proyecto de mensajes aleatorios
Como buena práctica, crea un repositorio remoto en GitHub y clónalo en tu computador. Después, inicia un proyecto con NPM con el comando npm init -y. Con esto ya tienes todo listo para empezar el proyecto.
Dentro del proyecto crea la siguiente estructura de archivos:
Un directorio llamado src que contenga el archivo principal del proyecto index.js
Un directorio llamado bin que contenga un archivo ejecutable global.js
Creando el archivo index.js
En el archivo index.js agrega el siguiente código:
Un array llamado messages que contiene los mensajes
Una función funnyCommit que mostrará de manera aleatoria los elementos del array, es decir, los mensajes aleatorios.
Al final, exporta la función mediante module.exports.
const messages = [
"This is where it all begins...",
"Commit committed",
"Version control is awful",
"COMMIT ALL THE FILES!",
"The same thing we do every night, Pinky - try to take over the world!",
"Lock S-foils in attack position",
"This commit is a lie",
"I'll explain when you're older!",
"Here be Dragons",
"Reinventing the wheel. Again.",
"This is not the commit message you are looking for",
"Batman! (this commit has no parents)",
];
const funnyCommit = () => {
const message = messages[Math.floor(Math.random() * messages.length)];
console.log(`\x1b[34m${message}\x1b[89m`);
}
module.exports = {
funnyCommit
};
Creando el archivo global.js
En el archivo global.js agrega el siguiente código, en el que importamos el la función del archivo index.js y la ejecutamos.
#!/usr/bin/env node
let random = require('../src/index.js');
random.funnyCommit();
⠀⠀
#!/usr/bin/env node es una instrucción que sirve para indicar que este archivo se ejecutará con Nodejs. Después realizamos la importación de nuestro archivo index.js. Finalmente, ejecutamos la función de mensajes aleatorios funnyCommit.
Modificar el archivo package.json para el proyecto
⠀⠀
En el archivo package.json, agrega "bin" haciendo referencia a nuestro archivo global.js y "preferGlobal" en true.
Verificar que el nombre del repositorio sea igual al nombre que tendrá en npm
Verificar que el nombre no esta en npm () y que no hayan dependencias que hagan lo mismo que nosotros estamos a punto de publicar.
Clonar el repositorio en mi local
En el proyecto crearemos un archivo index.js (dentro de src) que tendrá la lógica del proyecto.
const messages = [
"This is where it all begins...",
"Commit committed",
"Version control is awful",
"COMMIT ALL THE FILES!",
"The same thing we do every night, Pinky - try to take over the world!",
"Lock S-foils in attack position",
"This commit is a lie",
"I'll explain when you're older!",
"Here be Dragons",
"Reinventing the wheel. Again.",
"This is not the commit message you are looking for",
"Batman! (this commit has no parents)",
];
const funnyCommit = () => {
const message = messages[Math.floor(Math.random() * messages.length)];
console.log(`\x1b[34m${message}\x1b[89m`);
}
module.exports = {
funnyCommit
};
Se crea una carpeta bin y dentro de ella el archivo global.js
#!/usr/bin/env node
let random = require('../src/index.js');
random.funnyCommit();
La diferencia entre un módulo local y un módulo global es que el local se guarda DENTRO de la carpeta del proyecto, por lo cual, si quieres ejecutar el script en una terminal, tendrás que viajar primero a la carpeta.
El global, en cambio, lo guarda en un path "universal" (tú mismo puedes personalizarlo) el punto es que puedes ejecutar los scripts de este módulo sin importar en dónde estés ubicado dentro de tu terminal.
Según he leído, se recomienda siempre mantener módulos locales para evitar bugs tremendos de compatibilidad entre tus proyectos y realmente son pocos los módulos que merecen la pena trabajar globales, solo aquellos que te brindan comandos de terminal que frecuentes mucho o que uses en la mayoría de tus proyectos, de resto, es mejor manejar módulos locales.
++Acerca de los caracteres dentro de console.log(...)++
Dentro del console.log() que has mostrado, se están utilizando secuencias de escape ANSI para dar formato al texto que se muestra en la consola.
La secuencia \x1b se utiliza para indicar que se va a utilizar una secuencia de escape. Luego, [34m se refiere al código de color para el texto azul y [89m es el código para restablecer el color de la consola a su valor predeterminado.
En resumen, el código \x1b[34m establece el color del texto en azul y \x1b[89m lo restablece a su valor predeterminado. En este caso, message es el texto que se mostrará en la consola con el color azul.
Esto puede ser útil para hacer que ciertos mensajes se destaquen en la consola y sean más fáciles de leer o identificar.
Para esta clase crearemos un proyecto de una página que nos muestre mensajes aleatorios, en mi caso, citas espontáneas, de mi libro favorito Orgullo y Prejuicio 🤗
Crea un repositorio en Git-Hub, primero verifica que el nombre del repositorio no haya sido usado en npm, en el siguiente link :
npm
Clona el repositorio en una carpeta de tu equipo donde lo quieras guardar, desde la terminal de tu preferencia y posterior ingresa a la carpeta e inicializa npm, con npm init -y.
Ya con el proyecto abierto, crea una carpeta llamada src y dentro de esta un archivo index.js, donde crearás una variable que contenga el array de mensajes que quieres mostrar en tu proyecto y la función random para mostrar un mensaje en específico:
const quotes = [
'"I am not a man who is easily swayed by love, but when I do fall, I fall completely." - Mr. Darcy',
'"I cannot imagine how I should live without him." - Elizabeth Bennet',
'"You are the only woman who could ever make me feel this way." - Mr. Darcy',
'"Your eyes tell me everything your words cannot." - Mr. Darcy',
'"The truth is, I have no pride. I cannot tolerate being slighted." - Mr. Darcy',
'"True humility is a very rare quality in any degree, and I rarely encounter it in a woman." - Mr. Darcy',
'"I cannot live without you, Elizabeth. You are my life, my love, my everything." - Mr. Darcy',
'"I love you more than words can express, and every day I love you more and more." - Mr. Darcy',
'"I could not marry a woman without fortune and with such a disrespectable family." - Mr. Darcy',
'"I cannot allow my reputation and position to be affected by a imprudent marriage." - Mr. Darcy',
'"You are a woman with a dull mind and a vulgar personality." - Mr. Darcy',
'"I could not marry a woman like you, even if you asked humbly." - Mr. Darcy',
'"Your pride is so great, your arrogance so excessive, that I cannot forgive it." - Elizabeth Bennet',
'"I cannot believe that someone as arrogant and condescending as you could be so little sensitive to the feelings of others." - Elizabeth Bennet',
'"You are an arrogant, proud, and conceited man, and I cannot stand your company." - Elizabeth Bennet',
'"You are a man without scruples, who uses your wealth and position to crush others." - Elizabeth Bennet',
'"You are a cold, calculating, and unfeeling man, and I cannot stand to be near you." - Elizabeth Bennet',
'"You may offer me the world, but you will never have my love. I could never be with a man as arrogant, proud, and conceited as you, neither now nor ever in my life." - Elizabeth Bennet',
];
const sponQuote = () => {
const quote = quotes[Math.floor(Math.random()* quotes.length)];
console.log(`\x1b[34m${quote}\x1b[89m`);
};
module.exports = {
sponQuote
};
A continuación crearás una carpeta llamada bin, donde a su vez crearás un archivo llamado global.js, que hará el llamado a la función que creamos en index.js:
#!/usr/bin/env node
let random = require('../src/index.js');
random.sponQuote();
Hola segun entiendo en [https://www.npmjs.com/] se suben librerias para que otros usuario reutilicen el codigo de esas librerias en sus proyectos. Pero en el ejemplo que se explica en esta clase no se crea una libreria sino que se crea un programa ejecutable desde la consola.
.
¿esto quiere decir que en [https://www.npmjs.com/] se pueden subir tanto librerias como programas ejecutables?, osea, si yo creo una app de escritorio con nodejs y electronjs, entonces, ¿es recomendable publicar dicha app en [https://www.npmjs.com/]
• Vamos a crear un nuevo paquete, vamos a ++github++ y creamos un nuevo repositorio (buscar el menú desplegable al lado derecho y seleccionar “Create a new repository”).
• El nombre del repositorio debe coincidir con el nombre del paquete a crear.
• El nombre del paquete no puede estar ya ocupado, para verificar se consulta en la página de npm (enlace: aquí) y en el buscador se pone el nombre que queremos verificar, si no aparece un paquete con ese nombre, es libre para crearlo.
• Volviendo a ++github++, se va agregando las configuraciones como el nombre, la descripción, seleccionar de tipo público, elegir para el .gitignore el template para Node, la licencia de tipo MIT y finalmente se da click al botón verde para crear el repositorio.
• En la terminal, dentro de la carpeta raíz que creamos llamada npm, clonamos el repositorio que acabamos de crear colocando la url del mismo, por ejemplo con la url de gndx queda:
• Inicializamos el proyecto con los valores por defecto:
npm init -y
• Abrimos el editor ++VS Code++ con: code .
• Abrimos el archivo package.json y se puede editar valores que se configuraron por defecto como la descripción, el autor, la licencia, etc.
• En ++VS Code++, se crea una nueva carpeta llamada src.
• Dento de la carpeta de src, se crea el archivo index.js, el código queda:
const messages = [
"This is where it all begins...",
"Commit committed",
"Version control is awful",
"COMMIT ALL THE FILES!",
"The same thing we do every night, Pinky - try to take over the world!",
"Lock S-foils in attack position",
"This commit is a lie",
"I'll explain when you're older!",
"Here be Dragons",
"Reinventing the wheel. Again.",
"This is not the commit message you are looking for",
"Batman! (this commit has no parents)",
];
/* Math.random indica un número aleatorio entre el 0 y el 1, al multiplicar
con messages.length que es la cantidad total de elementos en el array:
messages, da un número decimal que no supera a esa longitud.
Math.floor redondea el número al entero mas cercano
Por ejemplo si se tiene 5.95, lo lleva a 6, en el caso de messages redondea el número decimal resultante de Math.random() * messages.length
*/
const funnyCommit = () => {
const message = messages[Math.floor(Math.random() * messages.length)];
console.log(`\x1b[34m${message}\x1b[89m`);
}
/* Las siglas dentro de console.log signiican que el formato del mensaje tendrá un color en específico según las nomenclaturas configuradas como blue =\x1b[34m
*/
module.exports = {
funnyCommit
};
• Se crea otra carpeta para la base del proyecto llamada bin y dentro de ella el archivo llamado global.js, el código queda:
#!/usr/bin/env node
let random = require('../src/index.js');
random.funnyCommit();
• Dentro del package.json debe estar agregado las siguientes características relacionadas a bin:
++La siguiente es una respuesta de una IA a la que le pedi me explicara el codigo de global.js:++
Este es un fragmento de código JavaScript que se utiliza para ejecutar un módulo Node.js a través de la línea de comandos.
La primera línea, #!/usr/bin/env node, se llama shebang y se utiliza para indicarle al sistema operativo que el archivo debe ser ejecutado con Node.js. Esto permite ejecutar el archivo directamente desde la línea de comandos en lugar de tener que llamar a Node.js explícitamente.
La segunda línea let random = require('../src/index.js'); importa el módulo index.js desde la carpeta src en el directorio padre y lo almacena en una variable llamada random. Este módulo contiene la definición de una función llamada funnyCommit() que puede ser invocada en este archivo.
La última línea random.funnyCommit(); invoca la función funnyCommit() del módulo importado index.js. Esta función puede realizar cualquier tarea específica que esté definida en el módulo.
En resumen, este fragmento de código se utiliza para invocar una función específica (funnyCommit()) que está definida en un módulo de Node.js (index.js) desde la línea de comandos, lo que permite automatizar ciertas tareas o procesos en una aplicación.
Hola, leyendo en internet entendi que la clave “bin” se pone en el archivo package.json para asignarle los archivos que son ejecutables, osea, en “bin” se asignan las rutas de los archivos js que contienen el codigo de las llamadas de las funciones del paquete creado y segun entiendo si un codigo contiene llamadas de funciones es porque dicho codigo es un ejecutable.
.
¿Si lo anterior es correcto quiere decir que la clave “bin” solo se debe poner en el archivo package.json si el paquete creado es un ejecutable, osea, si el paquete es una libreria no debo poner “bin” en el archivo package.json?