No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Crear un paquete

12/15
Recursos

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

Directorio base

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.

```js 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.

```js

!/usr/bin/env node

let random = require('../src/index.js');

random.funnyCommit(); `` ⠀⠀#!/usr/bin/env nodees una instrucción que sirve para indicar que este archivo se ejecutará con Nodejs. Después realizamos la importación de nuestro archivoindex.js. Finalmente, ejecutamos la función de mensajes aleatoriosfunnyCommit`.

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.

json { ... "bin": { "random-str-msg": "./bin/global.js" }, "preferGlobal": true }

El nombre que especifiquemos dentro de "bin" será el que utilicemos en la terminal cuando el paquete esté instalado.

¡Listo! Ya tienes un paquete para publicarlo en NPM.

Contribución creada por Andrés Guano (Platzi Contributor).

Aportes 14

Preguntas 12

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Mis apuntes 🤓

  • . Crear un repositorio

    1. Verificar que el nombre del repositorio sea igual al nombre que tendrá en npm
      1. Verificar que el nombre no esta en npm (https://www.npmjs.com/) y que no hayan dependencias que hagan lo mismo que nosotros estamos a punto de publicar.
    2. 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();
    
  • Dentro del archivo package.json añadir

"homepage": "https://github.com/gndx/random-str-msg#readme",
  "bin": {
    "random-str-msg": "./bin/global.js"
  },
  "preferGlobal": true,
  "dependencies": {
    "g": "^2.0.1"
  }
Si le hago una contribución a este proyecto, Oscar me la aceptaría? Me hace ilusión que este sea mi primer pull request

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.

Curioso como en el minuto 3:40 tira error porque escribió “int” en vez de “init” pero lo que se ve es que lo escribió bien 🤔

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 🤗

  1. Crea un repositorio en Git-Hub, primero verifica que el nombre del repositorio no haya sido usado en npm, en el siguiente link :

    npm

  2. 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.

  3. 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
    };
    
  4. 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();
    
  5. Posterior en el archivo package.json, agregarás:

    "bin": {
        "sponQuotes": "./bin/global.js"
      },
      "preferGlobal": true
    

🎨 Archivos del Proyecto 🎨


 

Pasos 📌

 

  • • 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:
git clone https://github.com/gndx/random-str-msg.git

 

  • • Entramos a la carpeta con:
cd random-str-msg

 

  • • 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:
      "bin": {
	"random-str-msg": "bin/global.js"
},
"preferGlobal": true,
"dependencies": {
	"g": "^2.0.1"
}

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.

Indicar que es un paquete global

"preferGlobal" : true
Comparto mis apuntes: ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-11-20%20a%20la%28s%29%2009.54.13-6f296d6d-ed7b-4284-9d9d-ba613ea61e36.jpg) ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-11-20%20a%20la%28s%29%2009.54.29-307d6eeb-5c90-40b7-ab1e-96ba8986bf69.jpg) ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-11-20%20a%20la%28s%29%2009.54.51-95c730bd-ed35-4c45-b36c-4e1703fe6236.jpg) ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-11-20%20a%20la%28s%29%2009.55.48-a3603bcd-e319-41dd-8faa-436f959a8ab5.jpg) ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-11-20%20a%20la%28s%29%2009.56.18-f8ae37ab-4386-4b45-afcb-4d04b17ed7ac.jpg) ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-11-20%20a%20la%28s%29%2009.56.37-e7bfcfee-71c9-4ac4-b613-a47d987cc0dc.jpg) ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-11-20%20a%20la%28s%29%2009.57.12-6fc51024-223b-44d3-a36f-9b946332b823.jpg)

Crear la carpeta mkdir bin y el archivo global.js con la terminal, en una línea de comando:

mkdir bin && touch bin/global.js

Al crear un paquete para NPM, podrás compartir tu trabajo a varios desarrolladores e instalar tu paquete mediante npm install tu-Paquete

Elegir un nombre para tu paquete
Al publicar un paquete en npm, es necesario que el nombre del mismo sea único. Es decir, no debe existir ningún otro paquete publicado en NPM, con el mismo nombre del que deseas publicar. Asegúrate de eso buscando en la página oficial de NPM, el nombre del paquete. Si no hay coincidencias, lo puedes publicar.

Sin embargo, no agregues números porque NPM lo detectará como spam. Es válido agregar tu nombre de usuario para diferenciarlo. También es recomendable que no existan paquetes que hagan lo mismo que hará el paquete que estas a punto de publicar. Esto es muy bueno para que tu paquete sea innovador. Luego, como buena práctica:

• Crea un repositorio remoto en GitHub. Debes asegurarte que el nombre del repositorio sea igual al nombre que tendrá el paquete en npm.
• Clona el repositorio en tu computador.
• Entra a la carpeta de tu proyecto y ejecuta npm init.
• Llena los campos correspondientes que puedas por el momento, ya que más adelante, podrás complementar dicha información.
• Crea la siguiente estructura de archivos: -Un directorio/carpeta llamada src, que contenga el archivo principal del proyecto, el index.js -Un directorio/carpeta llamada bin, que contenga un archivo ejecutable, el global.js.

Con esto, ya tienes todo listo para empezar a trabajar el código. 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
};

En el archivo global.js, agrega un código en el que importas la función del archivo index.js y la ejecutas:

!/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 de haber realizado la importación de tu archivo index.js, finalmente, ejecuta la función de mensajes aleatorios funnyCommit.

Al final de tu package.json, agrega “bin” haciendo referencia a tu archivo global.js y “preferGlobal” en true:

{
    ...
    "bin": {
        "random-str-msg": "./bin/global.js"
    },
    "preferGlobal": true
}

El nombre que especifiques dentro de “bin”, debe ser el nombre del paquete y el comando que utilices en la terminal para ejecutarlo, cuando el mismo esté instalado en tu máquina. ¡Y listo! 🙂 Ya tienes un paquete disponible para publicar en NPM.

Para crear un paquete en npm, sigue estos pasos: ### Inicialización del proyecto 1. **Crear un directorio para tu proyecto**: Crea un directorio para tu nuevo paquete y navega hasta él en tu terminal. 2. **Inicializar el proyecto**: Ejecuta el siguiente comando para iniciar un nuevo proyecto npm. Esto generará un archivo `package.json` que contendrá la información de tu paquete.bash Copy codenpm init Sigue las instrucciones en la terminal para proporcionar la información necesaria, como el nombre del paquete, la versión, la descripción, el punto de entrada, los comandos de prueba, etc. ### Estructura del paquete 1. **Estructura de archivos**: Crea la estructura de archivos necesaria para tu paquete, como los archivos de código fuente, pruebas, documentación, etc. 2. **Punto de entrada**: Define el punto de entrada de tu paquete en el archivo `package.json`. Puedes hacer esto en la sección `"main"` de `package.json` para especificar el archivo que servirá como punto de entrada de tu paquete. ### Publicación del paquete 1. **Registro en npm**: Si no tienes una cuenta en el registro de npm, crea una en [npmjs.com](https://www.npmjs.com/signup). Luego, inicia sesión en tu terminal utilizando el siguiente comando e ingresa tus credenciales cuando se te solicite:bash Copy codenpm login 2. **Publicación del paquete**: Una vez que has iniciado sesión, puedes publicar tu paquete en el registro de npm utilizando el siguiente comando:bash Copy codenpm publish Asegúrate de que el nombre de tu paquete no esté tomado por otro usuario en el registro de npm.