Al crear un paquete para NPM, podrás compartir tu trabajo a varios desarrolladores y utilizar tu código mediante npm install. Te mostraré un ejemplo, un proyecto de mensajes aleatorios que estará instalado globalmente y se ejecutará mediante la terminal.
Proyecto de mensajes aleatorios
Crea el directorio del proyecto y el archivo package.json mediante npm init. Inicia un repositorio local de Git con git init. Al momento de publicar un paquete, el proyecto debe tener un nombre único, puedes agregar tu nombre de usuario para diferenciarlo, pero no agregues números, ya que NPM lo detecta como spam.
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
En el archivo index.js agrega el siguiente código, un array llamado messages que contiene cinco nombres y una función randomMsgque mostrará de manera aleatoria los elementos del array. Al final, exporta la función mediante module.exports.
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.randomMsg();
⠀⠀ #!/usr/bin/env node es una instancia de una línea shebang, la primera línea en un archivo de texto plano ejecutable en plataformas similares a Unix que le dice al sistema: a qué intérprete debe pasar ese archivo para su ejecución, a través del comando línea siguiendo la magia #! prefijo.
⠀⠀
En el archivo package.json, agrega "bin" haciendo referencia a nuestro archivo global.js y "preferGlobal" en true (el signo + representa las líneas de código a añadir).
{
"name": "random-mesagges-<tuUsuario>",
"version": "1.0.0",
"description": "Vamos a crear un paquete para NPM",
"main": "src/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Tu Nombre <[email protected]>",
"license": "MIT",
+"bin": {
+ "random-msg": "./bin/global.js"
+ },
+ "preferGlobal": true
}
¡Listo! Ya tienes configurado el proyecto para publicarlo en NPM.
Contribución creada con aportes de: Andrés Guano y areyouivan.
Aportes 43
Preguntas 19
Ordenar por:
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.
// Se declara el arregloconst messages = [
"David",
"Diana",
"Ana Maria",
"Isabela",
"Antonio",
"Norma"
]
//Crear función para enviar aleatoriamente los nombres del arregloconst randomMsg = () => {
const message = messages[Math.floor(Math.random()*messages.length)]
console.log(message)
}
// Exportar como un módulomodule.exports = { randomMsg }
Se debe crear una carpeta bin donde se crea ele archivo global.js (Configuración que se necesita)
#!/usr/bin/env node
// se va ejecutar dentro de bash
//Variable que llama la funcion que exportamos
let random = require('../src/index.js')
//Ejecuto la funcionrandom.randomMsg()
Modifico el package.json y coloco la configuración de bin que necesito
#!/usr/bin/env node es una instancia de una línea shebang : la primera línea en un archivo de texto plano ejecutable en plataformas similares a Unix que le dice al sistema a qué intérprete debe pasar ese archivo para su ejecución , a través del comando línea siguiendo la magia #! prefijo (llamado shebang ).
Nota: Windows no admite líneas shebang , por lo que efectivamente se ignoran allí; en Windows es solo la extensión del nombre de archivo de un archivo dado que determina qué ejecutable lo interpretará. Sin embargo, todavía los necesita en el contexto de npm .
⠀⠀
En esta clase crearemos un paquete para poder publicarlo.
⠀⠀
Inicializamos nuestro como hemos aprendido con git init y npm init .
⠀⠀
Dentro crearemos nuestra carpeta src donde vivirá nuestro código y otra de bin
⠀⠀
⠀⠀
Creamos un archivo index.js y colocamos lo siguiente.
⠀⠀
⠀⠀
Estamos creando un array llamado messages → que vivirá dentro de una función(randomMsg). Ahí iniciamos una constante cuyo valor llama al array, pero con la función Math.floor() que redonda nuestros valores hacía abajo y dentro Math.random() el cuál multiplicamos por la longitud del array.
⠀⠀
Por último llamamos un console.log() que nos mostrará el mensaje random.
⠀⠀
Dentro de la carpeta bin crearemos un archivo llamado global. Escribimos la siguiente linea:
⠀⠀
#!/usr/bin/env nodelet random = require('../src/index.js');
random.randomMsg();
⠀⠀
Iniciamos random importando nuestro código de index.js. Luego lo llamamos para ejecutar el programa.
⠀⠀ #!/usr/bin/env node
Es una instancia de una línea shebang, la primera línea en un archivo de texto plano ejecutable en plataformas similares a Unix que le dice al sistema; a qué intérprete debe pasar ese archivo para su ejecución, a través del comando línea siguiendo la magia #! prefijo (llamado shenbang).
⠀⠀
Vamos a editar nuestro archivo package.json.
⠀⠀
Debajo de “license” definimos bin, colocamos nuestro script y su ruta. Después seteamos “preferGlobal” con true
{
"name": "random-mesagges",
"version": "1.0.0",
"description": "Vamos a crear un paquete para NPM",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Iván García <[email protected]>",
"license": "MIT",
"bin": {
"random-msg": "./bin/global.js"
},
"preferGlobal": true
}
Estoy usando gitbash como consola. Mi compu es windows. Por lo tanto en vez de escribir sudo npm link escribo solo npm link. Mi consola la abrí como administrador. Está eso correcto? Obtengo el siguiente error agradezco si alguien me pudiera ayudar.
npm ERR! code ENOENT
npm ERR! syscall chmod
npm ERR! path C:\Program Files (x86)\Nodist\bin\node_modules\js-random-messages.bin\global.js
npm ERR! errno -4058
npm ERR! enoent ENOENT: no such file or directory, chmod 'C:\Program Files (x86)\Nodist\bin\node_modules\js-random-messages.bin\global.js’
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Cristobal\AppData\Roaming\npm-cache_logs\2020-06-23T22_31_57_854Z-debug.log
`
Debemos tener nuestra aplicación dentro de la carpeta src y de ahí exportar nuestro archivo main o en este caso el index.js.
luego de esto, en la raíz creamos otra carpeta llamada bin que contendrá un archivo js llamado global.js en el cual vamos a crear la configuración necesaria para llamar nuestra paquete desde la consola.
También tenemos que configurar nuestro package.json en el que vamos añadirle un nuevo apartado llamado bin dentro de el vamos a registrar el paquete que estamos creando, al cual le damos un nombre que en este caso es llamado “random-msg” y finalizamos activando la opción ‘preferGlobal’.
No pense que era tan adictivo estudiar en platzi 3:04am argentina! Pero estoy feliz y sin trabajo desde la pandemia! nunca pares de aprender! PlatziSalu2!
Crea un proyecto, en este caso random de mensajes.
En la terminal se fija estar en el entorno de trabajo y crea carpeta del proyecto.
Se mueve a la carpeta e inicializa el proyecto: con git, luego con npm.
Completa todas las opciones de información sobre el proyecto. El entry point lo coloca en la carpeta “src/index.js” (después tiene que crear la carpeta y el archivo), la licencia es MIT, el autor ya queda seteado en la maquina del proyecto anterior.
Entra al archivo creado con el comando code, que abre visual studio code (al archivo package.json). Estando en Visual Studio Code crea la carpeta src y dentro el archivo index.js donde va a vivir el proyecto (en este caso el random de mensajes, como va a funcionar, como va a añadir la configuración dentro del package y como lo va a inicializar).
Crea la lógica del proyecto: un array de nombres y una función que mediante un random muestra en consola alguno de los nombres del array.
Para exportar la función que muestra los nombres utiliza:
module.exports = { nombreDeLaFuncion };
Crea una nueva carpeta que va a llamar bin. Ahí va a estar la configuración para que este paquete que estamos creando sea un paquete que se instala de forma global.
Dentro de la carpeta crea un archivo que se llama global.js
Dentro de este archivo, establece que es un elemento que se va a ejecutar dentro del sistema bash con esta primer linea
#!/usr/bin/env node
Genera una variable con el nombre random y le coloca un require, luego la ejecuta con la funcion que habiamos creado antes.
let random = require(’ …/src/index.js’ );
random.randomMsg(); //randomMsg es el nombre de la funcion que habiamos creado en el archivo index.js
De esta forma vamos a poder ejecutar este comando dentro de la terminal al escribir el nombre que hay que setear a continuacion.
En el archivo package.json creamos un apartado que llamamos bin y dentro creamos el nombre del comando y hacemos que llame al archivo global.js
tambien debemos configurar que este paquete sea de forma global. Para eso agregamos el siguiente valor
"preferGlobal": true
Entonces lo que agregamos en package.json quedaria asi:
“bin”: {
“random-msg”: “./bin/global.js”
},
“preferGlobal”: true
Es interesante crear paquetes para publicarlos, puede ser muy útil para tener bloques de código que resuelven un problema específico. Así solamente instalamos nuestro paquete y lo usamos.
Esta clase es escencial porque me soluciono un problema en electron para trabajar con modulos, electron no me permite trabajar con imports o exports normales. asi que debes crear tus modulos e instalarlos en tu proyecto
Para crea un paquete, luego de inicializar el proyecto y generar el archivo index.js, configurar bin/global.js, para ejecutar el paquete, para ello se debe establecer el shell de node #!/usr/bin/env node.
IMPORTANTE en las nuevas versiones se declara distinto
yo estoy haciéndolo en la v16.14.2 (node)
//Declaramos el arreglo de mensajes.const messages = [
"Hello",
"Good morning",
"Good afternoon",
"Good evening",
"Good bye"
];
//Creamos la función aleatoria para el msj IMPORTANTE declarar que se va a exportar exportconst randomMsg = ( ) => {
const message = messages[Math.floor(Math.random()*messages.length)];
console.log(message);
}
Recomiendo la siguiente pagina, hay información importante que puede ayudar a entender mejor y ha profundizar en el curso. Muy interesante las explicaciones.
Hola!
Seguro vienes de la clase #13 buscando respuestas…
Te aparece este error?
/random-messages$ sudo npm link
>> /usr/bin/env: ‘node’: No such fileor directory
Para abordar este problema te sugiero 3 pasos:
(1) Allí en la carpeta donde estas ejecuta:
node./bin/global.js
Si el resultado es un nombre random de tu array. Todo bien.
Si esto no corre es porque hay un problema en tu función de debes revisarla (seguro es un typo 😃)
(2) Ahora ejecuta solamente:
npm link
Por alguna razón, los que instalamos node a través de NVM no necesitamos poner sudo por delante. (Si alguien sabe porqué se rompe cuando ponemos sudo, se los agradecería).
Debería correr y mostrarte algo así…
$ npm link
up todate, audited 3 packages in1s
found 0 vulnerabilities
y eso significa que todo va bien!
Pero si te sale esto…
$ npm link
npm ERR! code EJSONPARSE
npm ERR! path /home/tommy/tomProjects/Curso-NPM/Proj-RandomMessages/package.json
npm ERR! JSON.parse Unexpected token "}" (0x7D) inJSON at position 421while parsing near "...preferGlobal\":true,\n}\n"npm ERR! JSON.parse Failed to parse JSON data.
npm ERR! JSON.parse Note: package.json must be actual JSON, not just JavaScript.
npm ERR! A complete log ofthis run can be found in:
Es porque hay un error en nuestro package.json…
Revisa que no le hayas puesto una coma al final (eso me pasó a mi)… Debería quedar así:
"license": "MIT",
"bin":{
"random-msg":"./bin/global.js"
},
"preferGlobal":true// sin coma!!
}
Despues de tener iniciado el respositorio y NPM, necesitamos crear la carpeta SRC y dentro nuestro INDEX.JS, ya que tengamos el codigo que queramos listo necesitamos crear una nueva carpeta llamada BIN la cual dentro estara la configuracion para que nuestro paquete que estamos creando, se instale de forma global.
Dentro de esta carpeta creamos un archivo Global.js y aqui iran las configuraciones y como se eejecutara de forma bash, entonces dentro utilizamos:
#!/usr/bin/env node// se va ejecutar dentro de bash//Variable que llama la funcion que exportamoslet random = require('../src/index.js')
//Ejecuto la funcion
random.randomMsg()
De esta forma ya podemos crear un comando para poder ejecutar los comandos con el nombre que se le asignara.
El proyecto es un random de mensajes con el cual al ejecutarlo podrán recibir un mensaje aleatorio.
Comandos: git init y npn init
El archivo index.js en la carpeta src va vivir nuestro proyecto.
// Se declara el arregloconst messages = [
"David",
"Diana",
"Ana Maria",
"Isabela",
"Antonio",
"Norma"
];
//Crear función para enviar aleatoriamente los nombres del arregloconst randomMsg = () =>{
const message = messages[Math.floor(Math.random()*messages.length)];
console.log(messages0);
};
// Exportar como un módulomodule.exports = { randomMsg };
Se debe crear una carpeta bin donde estará la configuración para que el paquete que se eta creando se instale de forma global/ se crea el archivo global.js (Configuración que se necesita)
#!/usr/bin/env node// se va ejecutar dentro de bashlet random = require('../src/index.js');
random.randomMsg();
#!comando
Es una instancia de una línea shebang.
La primera línea en un archivo de texto plano ejecutable en plataformas similares a Unix que le dice al sistema a qué intérprete debe pasar ese archivo para su ejecución.
A través del comando línea siguiendo la magia la magia #! prefijo (llamado shebang ).
Nota: Windows no admite líneas shebang , por lo que efectivamente se ignoran allí; en Windows es solo la extensión del nombre de archivo de un archivo dado que determina qué ejecutable lo interpretará. Sin embargo, todavía los necesita en el contexto de npm .
Crearemos nuestro propio paquete y publicarlo para que otros desarrolladores puedan implementarlo en su proyecto. El proyecto que vamos a crear es un random de mensajes que podrán instalar como paquete global y al ejecutar en consola un comando recibirán un mensaje aleatorio.
Configuraciones iniciales de nuestro proyecto
Primero, crearemos nuestra carpeta donde irá nuestro proyecto. Luego, nos movemos a esa carpeta y ejecutamos el comando git init que iniciará un repositorio local que después podremos subir a GitHub, entre otras plataformas.
Ahora, ejecutaremos el comando npm init donde vamos a establecer la configuración de nuestro proyecto. (en este caso iniciamos nuestro proyecto en la carpeta src/index.js)
Creando nuestro proyecto
Vamos a nuestro editor de texto y nos ubicaremos en nuestro archivo raíz donde va a vivir nuestro proyecto (src/index.js).
Dentro de nuestro archivo JavaScript crearemos un arreglo con una lista de nombres. Luego, crearemos una arrow function que guardará en una variable el resultado de unos métodos matemáticos aplicados a cada elemento de nuestro arreglo para retornarlos aleatoriamente. Y además, exportaremos este código como un módulo.
// Creamos nuestro arregloconst nombres = [
"Ana",
"Sebastian",
"María",
"Oscar",
"Diego",
"Felipe",
"Laura",
"Daniela",
"Valentina",
"Elías",
];
//Crear función para enviar aleatoriamente los nombres del arregloconst randomMsg = () => {
const message = nombres[Math.floor(Math.random() * nombres.length)];
console.log(message);
};
//Exportamos la función como un módulomodule.exports = { randomMsg };
// Math.floor regresa el primer valor redondeado del metodo .random// Math.random regresa un valor random según el número de elementos del array
Importando nuestro proyecto y haciéndolo instalable de forma global
Ahora, crearemos una nueva carpeta llamada bin donde irá toda la configuración que necesita nuestro proyecto para que se instale de forma global. Luego, crearemos un archivo global.js en esta carpeta donde irá la configuración que necesita el proyecto.
En este archivo JS, colocaremos una línea que le indica a Node que se va a ejecutar dentro de Bash, luego creamos una variable donde importemos el módulo y luego lo ejecutaremos.
//indicamos que se va a ejecutar dentro de bash
#!/usr/bin/env node
//importamos el módulo con la lógica de nuestro código
let random = require("../src/index.js");
//Ejecutamos la función de nuestro archivo index.js
random.randomMsg();
Ya que tenemos eso listo, nos vamos al archivo package.json y debajo de el apartado de “license” vamos a crear otro apartado llamado “bin” y le colocaremos como nombre del paquete “generador-msg” y como contenido la ruta del archivo global.js que está en la carpeta de bin.
Además, para que se pueda instalar de forma global colocaremos el apartado “preferGlobal” con el valor de verdadero.
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.