post thumbnail

Node.js y Express: Package.json

Publicado Por: Oscar González, El 16/09/2013


Detalles del Curso:

Dificultad: Novato

Duración: 10 min


Como mencioné anteriormente en el capitulo Definiendo Rutas, Package.json es un archivo dentro de nuestras aplicaciones de Node cuyo fin es documentar un paquete de Node. En nuestro caso el paquete sería la aplicación que estamos desarrollando.

Vamos a abrir el proyecto que veníamos desarrollando en los capítulos anteriores y abrimos el archivo package.json. Actualmente debería lucir así:

{
  "name": "Ejemplo",
  "version": "0.0.1",
  "dependencies": {
    "express": "3.3.5"
  }
}

Como habíamos dicho esta configuración dice que nuestro proyecto se llama “Ejemplo”, está en la versión 0.0.1 y su única dependencia es Express.


Atributo "private"

A este json podemos agregarle el atributo "private": true, que significa que nuestro paquete es privado, no va distribuirse en NPM, por ejemplo.


Atributo "author"

En este miembro se define el autor de la aplicación:

"author": "oscar gonzález"

Atributo "scripts"

Ahora podemos continuar agregando "scripts": {}, este es bastante similar a rake en ruby, en "scripts" podemos agregar cualquier código que deba ser ejecutado vía npm. El script más común a ejecutar es "start", este corre cuando se inicia la aplicación.

"scripts": {
    "start": "node app.js"
}

Con este script podemos correr nuestro servidor ejecutando npm start a través de la linea de comandos, estando situados en el directorio del proyecto.

Incluso puedes definir tus propios scripts con nombres custom, como por ejemplo:

"build": "./scripts/build.js"

Entonces cuando corramos npm build, se ejecutará el contenido del archivo build.js.

Existen más scripts standard que puedes utilizar en este miembro del archivo Package.json, éstos pueden ser encontrados en la página de npm.


Atributo "dependencies"

Actualmente esta implementación de package.json solo tiene una dependencia, express, versión 3.3.5. Como es evidente las claves de este este atributo representan el nombre de la dependencia, y su valor es la versión.

Aquí pudiéramos agregar más dependencias. Supongamos que queremos agregar jade, simplemente se debe agregar debajo:

"dependencies": {
    "express": "3.3.5",
    "jade": "*"
}

Nótese que como versión he utilizado un asterisco ("*"), esto significa que no me importa versión que esté instalada, puedo utilizar cualquiera.

También pudiera colocar "x" si no me importa alguna versión menor:

"dependencies": {
    "express": "3.3.x"
}

También pudiera usar operadores como ">", "<", ">=", "<=":

"dependencies": {
    "express": ">=3.3.5"
}

En el blog de nodejitsu hay un artículo sobre las mejores prácticas al momento de definir dependencias.


Atributo "devDependencies"

Pueden ocurrir casos en los que queramos instalar dependencias que solo necesitamos en la etapa de desarrollo, para esto esta el atributo "devDependencies": {}.

Seguramente has notado que cuando desarrollamos en Node, cada vez que hacemos algún cambio en el proyecto tenemos que detener y volver a iniciar el servidor. "Nodemon" observa los archivos de nuestro proyecto y reinicia el servidor cada vez que detecta cambios en alguno de ellos. Esta seria una dependencia muy útil mientras estamos desarrollado y que no es necesaria en producción:

"devDependencies": {
    "nodemon": "*"
}

Entonces si ahora corremos npm install en el directorio del proyecto se instalará localmente (solo para el uso del proyecto), si hiciéramos sudo npm install -g nodemon se instalaría globalmente.

En el caso de instalar nodemon globalmente podríamos hacer nodemon app.js, en el directorio del proyecto y ya.

Si lo instaláramos solo localmente como lo es el caso de declararlo en "devDependencies", pudiéramos ir al atributo scripts y cambiar el valor del script "start":

"scripts": {
    "start": "nodemon app.js"
}

Ahora cuando corramos npm start en el directorio del proyecto iniciaríamos nodemon de una vez.

Ignorando Archivos con Nodemon

Supongamos que no queremos que nodemon reinicie el servidor cuando se hagan cambios en los archivos estáticos del proyecto, como por ejemplo, los que están en el directorio "/public". En este caso debemos crear un archivo llamado ".nodemonignore" que cumple una función similar a ".gitignore" en git.

// .nodemonignore

./public/*

Ahora cuando corramos nodemon no se reiniciará el servidor cuando modifiquemos algún archivo dentro del directorio "/public".


Atributo "engines"

Se puede controlar incluso en que versión de Node o NPM debe correrse el proyecto:

"engines": {
    "node": ">=0.10.3 <0.12",
    "npm": "~1.0.20"
}

Conclusión

En este capítulo te mostré cual es el propósito del archivo package.json en una aplicación Node.js, ahora podrás sacar provecho de esta herramienta. Para mayor información de este tema puedes revisar la documentación de npm sobre package.json.

Si te surge alguna duda no olvides que puedes dejarlas en los comentarios, más abajo en esta misma página, con gusto las responderé.

Saludos y hasta la próxima.


¿Te ha gustado esta publicación?

Compártela:

Por Oscar González

Conoce más sobre este autor aquí


comments powered by Disqus