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 13

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 鈥渦niversal鈥 (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贸 鈥渋nt鈥 en vez de 鈥渋nit鈥 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
    

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.

馃帹 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 鈥淐reate 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"
}

Indicar que es un paquete global

"preferGlobal" : true

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 鈥渂in鈥 haciendo referencia a tu archivo global.js y 鈥減referGlobal鈥 en true:

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

El nombre que especifiques dentro de 鈥渂in鈥, 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.

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