Uso de npm para gestionar dependencias y scripts de un proyecto
Una de las herramientas cruciales en cualquier desarrollador, principalmente frontend, es NodeJS, después de su descarga, eligiendo el sistema operativo, y su posterior instalación. En este momento ya deberemos tener disponible el comando npm. En esta entrada veremos cómo utilizar de manera cómoda npm para gestionar las dependencias y los scripts del proyecto.
Lo primero que debemos hacer es abrir una terminal para poder empezar a ejecutar comandos.
Después podremos empezar a escribir los comandos.
Recordad siempre tener actualizado npm.
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan”]
$ sudo npm i -g npm
[/terminal]
Nota: El sudo es la manera de ejecutar con permisos root, en Linux y MacOSX, tal como explicamos en su momento.
Empezaremos por crear una carpeta para un proyecto:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan”]
$ mkdir miproyecto
$ cd miproyecto
[/terminal]
Después empezamos a crear la estructura del proyecto ejecutando:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (proyecto)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /home/pepesan/proyecto/package.json:
{
“name”: “proyecto”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“author”: “”,
“license”: “ISC”
}
Is this OK? (yes) yes
[/terminal]
Como podemos ver nos preguntará los datos de nuestro proyecto, esto se reflejará en el fichero package.json:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ cat package.json
{
“name”: “proyecto”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“author”: “”,
“license”: “ISC”
}
[/terminal]
En este fichero es donde se configurarán todos los detalles del proyecto, incluidas las dependencias y los scripts a ejecutar.
PAra instalar dependencias en el proyecto deberemos ejecutar:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ npm install –save nombre_paquete
[/terminal]
Por ejemplo, Jquery:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ npm install –save jquery
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN proyecto@1.0.0 No description
npm WARN proyecto@1.0.0 No repository field.
+ jquery@3.4.1
added 1 package from 1 contributor and audited 1 package in 1.15s
found 0 vulnerabilities
[/terminal]
De esta manera se descargará la dependencia de jquery en el directorio node_modules y podremos utilizarla en el proyecto
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ ls -la node_modules/
total 12
drwxr-xr-x 3 pepesan pepesan 4096 nov 2 03:53 .
drwxr-xr-x 3 pepesan pepesan 4096 nov 2 03:53 ..
drwxr-xr-x 5 pepesan pepesan 4096 nov 2 03:53 jquery
$ ls -la node_modules/jquery/
total 48
drwxr-xr-x 5 pepesan pepesan 4096 nov 2 03:53 .
drwxr-xr-x 3 pepesan pepesan 4096 nov 2 03:53 ..
-rw-r–r– 1 pepesan pepesan 11945 oct 26 1985 AUTHORS.txt
-rw-r–r– 1 pepesan pepesan 190 oct 26 1985 bower.json
drwxr-xr-x 2 pepesan pepesan 4096 nov 2 03:53 dist
drwxr-xr-x 3 pepesan pepesan 4096 nov 2 03:53 external
-rw-r–r– 1 pepesan pepesan 1095 oct 26 1985 LICENSE.txt
-rw-r–r– 1 pepesan pepesan 3598 nov 2 03:53 package.json
-rw-r–r– 1 pepesan pepesan 2054 oct 26 1985 README.md
drwxr-xr-x 15 pepesan pepesan 4096 nov 2 03:53 src
$ ls -la node_modules/jquery/dist/
total 924
drwxr-xr-x 2 pepesan pepesan 4096 nov 2 03:53 .
drwxr-xr-x 5 pepesan pepesan 4096 nov 2 03:53 ..
-rw-r–r– 1 pepesan pepesan 9165 oct 26 1985 core.js
-rw-r–r– 1 pepesan pepesan 280364 oct 26 1985 jquery.js
-rw-r–r– 1 pepesan pepesan 88145 oct 26 1985 jquery.min.js
-rw-r–r– 1 pepesan pepesan 136397 oct 26 1985 jquery.min.map
-rw-r–r– 1 pepesan pepesan 227022 oct 26 1985 jquery.slim.js
-rw-r–r– 1 pepesan pepesan 71037 oct 26 1985 jquery.slim.min.js
-rw-r–r– 1 pepesan pepesan 108757 oct 26 1985 jquery.slim.min.map
[/terminal]
De esta manera disponemos de todo lo necesario para jugar con jquery, además el fichero package.json habrá reflejado esta dependencia:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ cat package.json
{
“name”: “proyecto”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“author”: “”,
“license”: “ISC”,
“dependencies”: {
“jquery”: “^3.4.1″
}
}
[/terminal]
Para quitar una dependencia bastará con ejecutar el comando:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ npm uninstall –save jquery
npm WARN proyecto@1.0.0 No description
npm WARN proyecto@1.0.0 No repository field.
removed 1 package in 1.018s
found 0 vulnerabilities
[/terminal]
Este comando también quitará la dependencia del package.json
Por otra parte si instalamos una dependencia más complicada, también descargará todas las bibliotecas de las que dependa
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ npm install –save-dev nodemon
> nodemon@1.19.4 postinstall /home/pepesan/proyecto/node_modules/nodemon
> node bin/postinstall || exit 0
Love nodemon? You can now support the project via the open collective:
> https://opencollective.com/nodemon/donate
npm WARN proyecto@1.0.0 No description
npm WARN proyecto@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”linux”,”arch”:”x64″})
+ nodemon@1.19.4
added 87 packages from 31 contributors and audited 8778 packages in 5.504s
found 0 vulnerabilities
[/terminal]
Como puede verse se instalan las 86 dependencias que tiene nodemon, a parte del paquete de nodemon. Esta vez como una dependencia de desarrollo, porque no es necesario para su ejecución en producción. Esto también se reflejará en el package.json
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ cat package.json
{
“name”: “proyecto”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“author”: “”,
“license”: “ISC”,
“dependencies”: {},
“devDependencies”: {
“nodemon”: “^1.19.4″
}
}
[/terminal]
De cara a gestionar los scripts de arranque es necesario modificar el fichero package.json
Por ejemplo para lanzar un servidor de node:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ cat package.json
{
“name”: “proyecto”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“start”: “./node_modules/nodemon/bin/nodemon.js index.js”,
“test”: “echo \”Error: no test specified\” && exit 1″
},
“author”: “”,
“license”: “ISC”,
“dependencies”: {},
“devDependencies”: {
“nodemon”: “^1.19.4″
}
}
[/terminal]
Si incluimos un fichero index.js en el proyecto:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ cat index.js
const http = require(‘http’);
const hostname = ‘127.0.0.1’;
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader(‘Content-Type’, ‘text/plain’);
res.end(‘Hello World\n’);
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
[/terminal]
y ejecutamos el comando:
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ npm start
> proyecto@1.0.0 start /home/pepesan/proyecto
> ./node_modules/nodemon/bin/nodemon.js index.js
[nodemon] 1.19.4
[nodemon] to restart at any time, enter `rs`
[nodemon] watching dir(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
Server running at http://127.0.0.1:3000/
[/terminal]
Entonces ya tendremos un servidor de desarrollo para gestionar el proyecto nodejs. en la url:
Para cerrar el servidor bastará con pulsar control+c para finalizar la ejecución.
Es una buena práctica crear un fichero .gitignore que evite subir las dependencias al servidor cuando lo manejemos con el gestor de versiones git.
[terminal user=”pepesan” computer=”sauron” cwd=”/home/pepesan/miproyecto”]
$ cat .gitignore
node_modules
[/terminal]
Comments