Búsqueda de sitios web

javascript - RequireJS y aplicación heredada


Tengo una aplicación heredada y he refactorizado partes de la aplicación en aplicaciones separadas de backbone.marionette. No tengo el tiempo ni el presupuesto para refactorizar todo y quiero que mi código sea más fácil de manejar, lo que me hizo pensar en requirejs.

La mayoría de los archivos están minimizados y mezclados juntos.

¿Puedo usar requirejs para este tipo de solución híbrida donde puedo trabajar en módulos separados de Backbone y aún así acceder al JavaScript existente?

Respuesta #1

Como alguien que recién empezó a usar Require.js en una base de código heredada que utiliza Backbone, siento tu dolor :-) Usé una combinación de enfoques, que enumeraré aquí.

Digamos que tienes fileA.js y fileB.js, y quieres convertir fileB.js para usar Require, sin cambiar fileA.js:

  • Abusar del espacio global

    Require no te obliga a importar cada variable a través de él; incluso en un archivo convertido a Require, todavía puedes acceder a las variables globales de la misma manera que lo harías con código no convertido a Require. Esto significa que si fileA crea todas sus variables en el espacio de nombres global/window (lo cual es muy probable si no estabas usando Require antes), fileB puede acceder a ellas independientemente de si fileA usa Require o no.

    Esta resultó ser mi solución para la mayoría de mis archivos heredados; simplemente los dejé tal como estaban y puse todo lo nuevo convertido a Require debajo de ellos. De esa manera, cada global que crean está listo y esperando cuando los archivos convertidos a Require los necesiten.

    Ahora, esto es genial si fileB depende de fileA, pero ¿qué pasa si es al revés? Bueno, Require tampoco impide que crees nuevas variables globales, lo que significa que fileB puede compartir cualquier cosa que quiera con fileA, siempre y cuando esté dispuesto a ponerlo en el espacio global.

  • Código duplicado

    No te alteres; sé lo importantes que son las prácticas de codificación 'DRY'. Sin embargo, para solo unos pocos archivos, lo que terminé haciendo fue crear duplicados convertidos para Require. Esto terminó siendo necesario porque estoy usando un complemento de Handlebars para Require para hacer la compilación de mis plantillas, así que si quería que algún archivo usara Handlebars, necesitaba que estuviera convertido para Require.

    Para combatir los problemas normales de no seguir el principio DRY, agregué comentarios a los archivos antiguos diciendo efectivamente "no agregues nada a este archivo, la versión requireificada es la versión 'real'". Mi plan es convertir lentamente más partes del sitio a Require con el tiempo, hasta que finalmente pueda eliminar el archivo original y obsoleto. Tenemos un equipo pequeño, así que esto nos funciona, pero en una empresa más grande esto podría no funcionar.

  • Refactorización

    Lo sé, dijiste que querías evitar esto, pero a veces un poco de refactorización puede darte mucho por tu dinero. Personalmente, apenas refactoricé nada en absoluto, pero había un par de lugares donde un pequeño ajuste simplificó mucho las cosas.

    En general, veo la refactorización como algo que haces después de cambiar a Require (para poco a poco, con el tiempo, llevar tu código que no usa Require "al redil").

  • Calzas

    Chchrist tiene razón al decir que los calzos son una buena manera de resolver los problemas de "a medio camino hacia Requerir". Sin embargo, personalmente no los usé en absoluto, así que realmente no puedo decir mucho sobre ellos, excepto "investíguelos, probablemente serán útiles".