Vi la charla de Paul Irish anunciando a Yeoman (www.yeoman.io), y estoy enganchado al concepto de ejecutar un entorno de compilación continua. No contento con esperar una invitación de Yeoman, probé Grunt y Brunch. Ambos se instalan fácilmente, y puedo poner en marcha nuevos proyectos con un mínimo esfuerzo.Importar un proyecto de JavaScript existente en un proyecto Grunt/Brunch
No entiendo cómo se podría migrar un proyecto existente a cualquiera de las plataformas. Mi proyecto utiliza un solo espacio de nombres y utiliza dos convenciones para módulos (una para instaurar otra para la utilidad), cada una de las cuales está envuelta en funciones anónimas autoejecutables que se exportan a la instancia o al espacio de nombres.
Tengo al menos 200 módulos y muchas más funciones simples, exportaciones de ayuda al espacio de nombres; por lo tanto, no es del todo eficiente usar la consola para crear estos en un proyecto grunt/brunch y luego importar manualmente cada módulo individualmente. Además, estoy usando al menos 15 herramientas de JavaScript de terceros diferentes. No me queda claro cómo introducirlos.
¿Cuál es la forma más eficiente de tomar un proyecto grande y existente y migrarlo a Grunt/Brunch con la menor cantidad de refactorización y compatibilidad con herramientas arbitrarias de terceros?
Actualización: de los dos, he encontrado a Brunch un poco más fácil de sobrellevar. Si usa el stock "esqueleto" (que es "plantilla" - desde la línea de comando {en la carpeta donde desea que ocurra el cambio), ejecute "brunch new [project_name] --skeleton git: //github.com/brunch /simple-js-skeleton.git ") para JS puro, obtienes una nueva estructura de carpetas que en realidad es bastante receptiva. Cualquier cosa que agregue a las carpetas de la "aplicación" (su propio código) o del "proveedor" (de terceros) se compilará automáticamente en la edición del archivo (cuando ejecute "brunch watch").
Esto es genial, excepto. De acuerdo con la documentación, usted controla el orden en que los scripts de los proveedores se compilan y concatenan juntos desde el archivo brunch config.coffee (archivo de texto JSON). Parece que los cambios en este archivo no tienen efecto, por lo que terminas con condiciones de carreras de terceros desde complementos que esperan otros complementos.
Además, cuando inserta su propio código en la carpeta de 'aplicación' creada automáticamente, obtiene una versión del código autocompilada, en tiempo real, como la edita; pero no es accesible. Brunch oscurece el objeto de ventana, por lo que mi declaración de espacio de nombre inicial para window.myNameSpace falla y todas las llamadas posteriores a la biblioteca al espacio de nombres también fallan. Esto tiene algo que ver con el sistema de módulos de Brunch, para lo cual no puedo encontrar documentación.
Lo resolví colocando mi clase de espacio de nombres en la carpeta 'proveedor', lo que aseguró que se adjuntara al objeto ventana; sin embargo, ahora hay una condición de carrera: mi espacio de nombres no siempre está disponible para todos mis módulos.
El problema ahora es la siguiente:
Una vez que haya copiado todos sus bibliotecas internas y externas en un proyecto Almuerzo, ¿Cómo se configura la aplicación para cargar en un orden cuerdo?
Lo que no entendí sobre Brunch fue que (al menos parece) requiere el patrón del módulo CommonJS. Estoy usando un patrón de espacio de nombres simple (pero en mi opción, bastante elegante) [Ver http://stackoverflow.com/questions/9072834/auto-generate-visual-studio-vsdoc-for-javascript-library y http://jsfiddle.net/2gxYJ/1/], lo que realmente hace que la conversión a otros sistemas de módulos (RequireJS, CommonJS, AMD, etc.) sea bastante no trivial una vez que la biblioteca se ha hecho grande. Entonces, cambié a Grunt, que no impone la restricción de diseño. – Christopher
Dado que 1.4 brunch es independiente de los sistemas de módulos, incluso puede deshabilitar los módulos. –
Eso es sobresaliente. La única característica que falta entonces es el soporte JSHint. Deshilachar como una opción de construir/ver sería genial. La configuración de Grunt también le da un objeto jshint/uglifyjs para configurar explícitamente su comportamiento. De todos modos, mi mayor problema con el brunch fue el requisito del módulo, así que definitivamente le daré otra oportunidad. – Christopher