Uso de CoffeeScript con Rails y Webpacker: Integración y Ejemplos

Clase 18 de 34Curso Intermedio de Ruby on Rails

Resumen

¿Qué es CoffeeScript y por qué es relevante?

CoffeeScript es un lenguaje que actúa como un metalenguaje o dialecto de JavaScript, introducido en momentos en que JavaScript no estaba tan maduro. Este lenguaje facilitó la codificación de JavaScript, incorporando ciertos elementos del paradigma orientado a objetos. Aunque hoy está en debate, es relevante ya que muchos proyectos de Rails siguen usándolo. Además, explorar metalenguajes como CoffeeScript puede optimizar tu proceso de codificación.

¿Cómo asociar CoffeeScript con Rails usando Webpacker?

Para integrar CoffeeScript en un proyecto de Rails, utilizamos el comando:

rails webpacker:install:coffee

Esto genera archivos y estructuras de directorios, asociando esta tecnología con el proyecto sin mayores modificaciones. Además, este generador crea un ejemplo llamado Hello Coffee que se puede eliminar por no ser útil, usando rm seguido del directorio del archivo. Una vez hecho esto, se debe editar el archivo application.js, ubicado en la carpeta app/javascript/packs, para definir la importación y consolidación de librerías JavaScript. Aquí se puede extender este archivo utilizando un sistema de consolidación, nombrado main.coffee.

¿Cómo estructurar scripts organizadamente con CoffeeScript?

La clave para organizar scripts de manera efectiva es usar namespaces. Primero, crea un archivo de consolidación, por ejemplo, main.coffee. Dentro de este, utiliza window para prefijar una variable global, como platzi, y dentro de este objeto, define un método init para inicializar elementos JavaScript:

window.platzi =
  init: ->
    console.log 'Mudrid.log by Platzi'

El uso de TurboLink Load es recomendable para ejecutar lógica después de que una página complete su carga:

document.addEventListener 'turbolinks:load', ->
  platzi.init()

Esto asegura que init se llame cada vez que el documento se cargue.

¿Cómo declaramos funciones específicas para cada vista?

Para crear funciones específicas por página, extiende el objeto global, detallando caminos específicos para vistas, así:

window.platzi =
  tasks:
    index:
      setup: ->
        console.log 'Index page'

Entonces, en la página vista de tasks, utiliza un filtro de Hamill para invocar la función:

:javascript
  platzi.tasks.index.setup()

Al navegar a la página index de tareas, verás el mensaje en la consola solo en esa vista, mostrando la modularización según la vista. Esta estrategia mantiene el código ordenado y enfocado, mejorando la mantenibilidad del proyecto.

Explorar más allá es clave: entender cómo CoffeeScript puede integrarse o cómo migrar tu código si eliges otra solución también es parte del aprendizaje en esta dinámica área del desarrollo.