npm

Cuando trabajamos con JavaScript existen diversas formas de incorporar paquetes en nuestro proyecto, por ejemplo utilizando un CDN, descargando la librería y agregándola a nuestra plantilla o compilando los archivos CSS y JS directamente en nuestros archivos principales dentro de la plantilla. De esta última alternativa trataremos en este tutorial.

Factores a considerar

Es importante señalar que este proceso tiene ventajas y desventajas, aunque considero son más las bondades que posee, por ejemplo nuestra plantilla queda más limpia al no tener tantos llamados a archivos CSS y JS.

Otro factor a considerar es que se debe recordar que el navegador realiza una petición por cada archivo que se esté llamando en nuestro proyecto, por lo que si disminuimos la cantidad de peticiones al servidor el tiempo de carga será menor.

El único contra que le veo a esta alternativa es el hecho de que requiere un poco más de trabajo por nuestra parte, aunque como veremos a continuación el proceso resulta bastante simple de realizar.

¿Qué es npm?

npm son las siglas de node package manager y básicamente es el manejador de paquetes de JavaScript, así como lo es Composer para PHP, es decir, nos permite instalar paquetes que se ejecutan del lado del cliente (frontend).

Si deseas conocer sobre Composer, tenemos una serie de tutoriales disponibles que te ayudarán a comprender mucho más sobre el manejador de dependencias para PHP.

En su sitio web https://www.npmjs.org podemos buscar todos los paquetes que nos sean de utilidad, encontrar una explicación acerca de los paquetes y cómo instalarlos.

sitio web de npm

Cuando instalamos alguna dependencia con npm install se genera automáticamente un directorio node_modules donde se guardan los paquetes instalados y un archivo package-lock.json que es el responsable de llevar un historial de los cambios realizados dentro de node_modules o cuando se realizan cambios en el archivo package.json.

Al momento de iniciar un proyecto sobre el que queremos instalar dependencias a través de npm, es recomendable ubicarnos en nuestro proyecto desde una terminal y ejecutar el comando

Este comando nos pedirá una serie de datos acerca de nuestro proyecto y una vez finalizado creará el archivo package.json.

creación de package.json

El archivo package.json es el responsable de almacenar el nombre de las dependencias instaladas catalogándolas principalmente en dos tipos: dependencias de desarrollo y dependencias de la aplicación.

El primer tipo contendrá todos los paquetes que se utilizan durante el proceso de desarrollo y que no serán necesarios una vez que nuestro proyecto se encuentre en producción. Para instalar este tipo de dependencias se debe agregar la bandera --save-dev al final del comando de instalación:

y para instalar las dependencias de la aplicación simplemente ejecutamos:

Además, también se pueden configurar dentro de este archivo scripts de ejecución para nuestro proyecto: por ejemplo si queremos ejecutarlo en modo de desarrollo, si queremos observar cambios sobre éste o si queremos empaquetarlo para llevarlo a producción.

Siguiendo lo anterior, nuestro archivo package.json lucirá de esta forma:

archivo package.json generado

Instalar un paquete npm en un proyecto de Laravel

Laravel, por defecto, ya cuenta con un archivo package.json que trae la mayoría de configuraciones mencionadas arriba, así como un conjunto de paquetes definidos que permiten realizar un excelente desarrollo en el frontend. De esta manera podemos instalar fácilmente las dependencias de JavaScript necesarias en un proyecto de Laravel.

Ahora bien, aunque el proceso explicado arriba es la forma más rápida de instalar un paquete, sin embargo, no hemos explicado aún cómo aplicarlo en nuestro proyecto de Laravel. Para aclarar este punto vamos a instalar a modo de ejemplo la librería SweetAlert 2 la cual permite manejar notificaciones de alerta de una forma más elegante.

Pueden conocer más acerca de esta librería en su sitio web https://sweetalert2.github.io/

Preparando nuestro proyecto de Laravel

Antes de instalar librerías externas se recomienda instalar todos los paquetes que trae Laravel por defecto. Para esto nos ubicamos en la raíz de nuestro proyecto desde una terminal y ejecutamos el comando:

Si quieres saber qué paquetes se están instalando solo debes ir al archivo package.json ubicado en la raíz del proyecto y ahí se listan todos los paquetes que se instalan cuando se ejecuta el comando npm install.

Adicionalmente, aunque esto no es obligatorio y solamente es para tener un layout creado y vistas sobre las que visualizar el ejemplo, ejecutaremos el comando:

Instalando el paquete SweetAlert 2

Si vamos al sitio web de la librería https://sweetalert2.github.io podemos ver varios ejemplos de su funcionamiento. Vamos al apartado de Installation y lo primero que podemos notar es que se puede aplicar la librería utilizando un CDN o a través de un gestor de paquetes como bower o npm. En este último es que nos vamos a enfocar.

Vamos a ubicarnos en la raíz de nuestro proyecto de Laravel desde una terminal y ejecutamos el comando:

Esto instalará el paquete que queremos en el directorio node_modules. También podemos verificar si se instaló el paquete viendo el archivo package.jsonen la llave dependencies.

Configurando el paquete en el proyecto

Laravel recomienda utilizar el archivo resources/js/bootstrap.js  para cargar todas las dependencias de JavaScript que vayamos a necesitar en nuestro desarrollo. Si vemos el archivo, podemos notar que ya vienen cargados los paquetes de Vue, Axios, jQuery y otras dependencias de Javascript.

El archivo resources/js/app.js se encargará de llamar a bootstrap.js para agregar todas las dependencias que hayamos incluido en él. De esta forma logramos centralizar todas nuestras dependencias de JavaScript en un único archivo lo que mejora la organización y escalabilidad de nuestro código.

Por ello, editamos el archivo bootstrap.js e importamos el paquete escribiendo: 

Escribiendo window.nombre_variable nos aseguramos que la variable creada tenga carácter global y pueda ser utilizada en todo nuestro proyecto. Esto se recomienda hacerlo cuando se va a implementar la librería en varias partes.

Lo siguiente es ubicarnos en la terminal nuevamente y ejecutar el comando:

De esta forma Laravel compilará todos los paquetes que se encuentran en node_modules y unificará los archivos que se encuentran en el directorio resources/js y resources/sass a los archivos app.js y app.css respectivamente.

Podemos usar una variación de npm run dev la cual es npm run watch que hace exactamente lo mismo pero con la diferencia de que se mantiene vigilando de algún cambio en los archivos del directorio resources, entonces al realizar un cambio y guardarlo, automáticamente se hace el proceso de compilación.

Estos archivos generados son los que tenemos que incluir en nuestro template. Para los estilos CSS podemos hacerlo escribiendo:

Y para los scripts de JavaScript:

Cuando queramos subir nuestro código a producción es recomendable minificar el código de CSS y JavaScript para lo cual en vez de ejecutar el comando npm run dev utilizamos el comando npm run production

 Usando SweetAlert2 en nuestro proyecto

Ya todo lo que queda es llamar a nuestro paquete SweetAlert 2 donde deseemos ejecutarlo dentro de un bloque JavaScript. Como ejemplo vamos a ejecutar un alert con el siguiente código:

Si todo ha ido bien veremos la siguiente respuesta en nuestra vista:

alerta usando SweetAlert

De esta forma podremos ir agregando todas las librerías Javascript que necesitemos en nuestros proyectos asegurando un flujo limpio y ordenado.

Material relacionado

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Aprende desarrollo web con Laravel, Vue.js y mucho más a partir de 12 USD al mes: ver planes.