Guía tutorial inicial de Parcel

Empaquetador Javascript enfocado en la sencillez


Parcel es una herramienta Javascript que procesa todo el código de nuestro sitio o aplicación web, recorriendo todos sus archivos enlazados, y generando una nueva colección de ficheros, más apropiados para el navegador.

De esta forma, Parcel permite partir de un fichero inicial (HTML o Javascript, por ejemplo) e ir revisando todos los archivos que se utilizan y generando en una nueva carpeta (normalmente dist) todos los archivos referenciados, no teniendo en cuenta los que no se estén utilizando.

Además, Parcel también soporta escribir código en otros lenguajes o preprocesadores, convirtiendo al lenguaje necesario final, lo que lo hace su utilización mucho más sencilla que con otros sistemas.

Parcel se encuentra en proceso de transición. Parcel v1 es estable y funciona correctamente, pero no se actualizará más, por lo que es probable que al instalarlo obtengas múltiples avisos de paquetes obsoletos o problemas de seguridad. Actualmente, Parcel v2 está en fase alpha y cambian algunas cosas, pero nos centraremos en ella en este artículo.

Instalación de Parcel

Para comenzar a utilizar Parcel2, lo primero es crear una carpeta, inicializar el proyecto e instalar Parcel. Vamos a hacerlo desde una terminal:

# Creamos la carpeta de nuestro proyecto (first-project)
$ mkdir first-project

# Accedemos a ella
$ cd first-project

# Inicializamos un proyecto con los datos por defecto
$ npm init -y

# Instalamos Parcel2 como dependencia de desarrollo
$ npm install -D parcel@next

# Comprobamos que está correctamente instalado
$ npx parcel --version
2.0.0-beta.1

Al instalar parcel@next estamos instalando la versión 2 estable. Podemos utilizar parcel@nightly para versiones más actuales, pero inestables (a riesgo de encontrarnos problemas) o simplemente utilizar parcel para utilizar la versión 1.

Observa también que estamos utilizando el flag -D para instalarlo como dependencia de desarrollo, ya que se trata de una herramienta de desarrollador. Otra opción sería instalarla de forma global con npm install -g parcel@next, tienes más información en instalaciones globales con NPM.

Como habrás observado, para utilizar Parcel necesitaremos tener instalado NodeJS, ya que utilizaremos el gestor de paquetes y dependencias NPM. Si no lo tienes instalado, te recomiendo seguir la guía de instalación de Node/NPM.

Preparación del código

Una vez instalado, lo habitual suele ser crear una estructura de carpetas para nuestro proyecto y colocar el esqueleto de la web. Podemos hacerlo así:

# Comprobamos que estamos en la carpeta raíz del proyecto
$ pwd
/home/manz/workspace/first-project

# Creamos la carpeta src/, que a su vez tendrá dentro assets/ y components/
$ mkdir -p src/{assets,components}

# Creamos los ficheros index.html, index.css e index.js en src/
$ touch src/index.{html,css,js}

# Abrimos VSCode en la carpeta actual (raíz del proyecto)
$ code .

Nuestro punto de entrada (entrypoint) va a ser el fichero index.html, puesto que será el primer archivo que va a leer el navegador. De la misma forma, Parcel también lo tomará como punto de partida. Así pues, editamos el archivo src/index.html y colocamos un HTML base escribiendo ! y pulsando TAB (Emmet):

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>

</body>
</html>

Sin embargo, este HTML es muy básico y aún no tiene enlazados los archivos .js y .css, por lo que vamos a enlazarlos correctamente añadiendo las etiquetas HTML correspondientes, justo antes del </head>. Nuestro <head> quedaría algo así:

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="./index.css">
  <script defer src="./index.js"></script>
</head>

Recuerda que la etiqueta <link> usa un atributo href para enlazar (y no tiene cierre de etiqueta), mientras que la etiqueta <script> usa un atributo src (y si tiene cierre). El atributo defer lo utilizamos para retrasar la carga de este script para cuando el HTML ya esté totalmente cargado (es equivalente a ponerlo antes del </body>). Puedes encontrar más información en modos de carga de la etiqueta HTML script.

Una vez hecho esto, vamos a añadir algo en el <body> para mostrarlo visualmente en nuestra página. Hacemos la siguiente modificación:

<body>
  <h1>Hello, World!</h1>
</body>

¡Hecho! Ya estamos listos para arrancar Parcel y ver su magia.

Aunque sólo hemos enlazado archivos .css y .js, una de las características más interesantes de Parcel es que podemos hacer exactamente lo mismo con, por ejemplo, un archivo .scss (Sass) y un archivo .ts (Typescript). Parcel detectará (por la extensión) de que tecnología se trata, instalará las dependencias necesarias y hará el preprocesado automágicamente.

Primeros pasos con Parcel

Una vez hemos realizado los pasos anteriores, abrimos una terminal y escribimos lo siguiente (asegurate siempre de estar en la carpeta raíz del proyecto):

# Arrancamos parcel indicando el punto de entrada (en nuestro caso: src/index.html)
$ npx parcel src/index.html

ℹ️ Server running at http://localhost:1234
✨ Built in 78ms

Este comando nos montará un servidor web local para ver la página que estamos desarrollando en vivo. La dirección donde se puede ver es http://localhost:1234, una dirección que sólo funcionará en nuestro equipo mientras tengamos Parcel activo y funcionando.

Bastará con copiar esa dirección (o, habitualmente, pulsar la tecla CTRL y hacer click en el enlace) y observaremos que se abre en nuestro navegador la página que estamos editando. Fíjate bien en la parte que indica Built in 78ms, ya que de existir algún error, en lugar de aparecer ese mensaje en verde, aparecerá el problema ocurrido.

Si en algún momento queremos detener el servidor local, bastará con pulsar CTLR+C. Ten en cuenta que si hacemos eso o cerramos la terminal, pararemos el servidor local y la dirección localhost dejará de funcionar.

Una de las características más interesantes es que Parcel permite actualizar sobre la marcha y en el navegador los cambios que vayamos haciendo en el código. Por ejemplo, los archivos index.css e index.js están aún en blanco, vamos a añadir algunas líneas y comprobar si el navegador se actualiza solo. Actualizamos el index.css:

body {
  background: hotpink;
  color: white;
}

Al pulsar CTRL+S (Guardar en VSCode), guardaremos el archivo, Parcel detectará cambios en el código fuente y actualizará el navegador para que recargue los cambios. Lo mismo debería ocurrir si modificamos el index.html o el index.js:

console.log("Ready!...");

Al guardar el fichero index.js, el navegador debería recargarse sólo, y si abrimos la consola Javascript del navegador pulsando F12, nos mostrará dicho mensaje en el apartado Console.

En los siguientes temas aprenderemos más sobre los diferentes modos de Parcel y su personalización. De momento, una buena práctica podría ser añadir el comando parcel src/index.html (sin npx) a un script de NPM.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev