2012-08-14 7 views
8

Quiero separar la lógica de mi aplicación en múltiples archivos de Javascript para la cordura y la facilidad de desarrollo, almacenada en la carpeta/src. Estos archivos se deben filtrar y concatenar en /dist/app.js durante el proceso de compilación. Estoy usando ronco para mi proceso de compilación, ya que viene con prácticas tareas de pelusa y concat.¿Cómo resuelvo las dependencias cuando deshilacho archivos javascript únicos con grunt?

 

    + 
    |- grunt.js 
    |- readme 
    |-vendors 
     |-backbone.js 
    |- src 
     |- core.js 
     |- user.js 
    |- dist 
     |-app.js 

Me estoy corriendo en un problema molesto. Yo uso backbone.js para la estructura de la aplicación, y la mayoría de mis archivos fuente comienzan definiendo modelos extendiendo Backbone.Model. Cuando suelta estos archivos, JSHint se queja de que Backbone no está definido, y con razón, el backbone reside fuera de su propio directorio. Incluir todos los scripts necesarios en el orden correcto es algo que supongo que se hace en el html. Cada archivo fuente individual solo debe conocerse a sí mismo.

sé que puedo suprimir estos indefinidos advertencias mediante el establecimiento de la bandera undef de pelusa en grunt.js a falsa pero quiero mantenerlo ajustado a cierto con el fin de ser avisado de otras variables no definidas en mi aplicación, ya que es un puntero común a los errores tipográficos. ¿Hay alguna forma clara de decir a grunt (o pelusa) qué archivos incluir antes de deshilarlos? ¿Estoy haciendo algo mal con mi proceso de compilación o con la arquitectura de mi aplicación? ¿O es simplemente algo con lo que tengo que vivir?

Respuesta

11

Los jshint opciones permiten especificar una lista de variables globales que vienen de otras bibliotecas que está utilizando, en su archivo grunt.js:



    jshint: { 
     options: { 
     curly: true, 
     eqeqeq: true, 
     immed: false, 
     latedef: true, 
     newcap: true, 
     noarg: true, 
     sub: true, 
     undef: true, 
     boss: true, 
     eqnull: true, 
     browser: true 
     }, 

     globals: { 
     jQuery: true, 
     Backbone: true, 
     _: true 
     } 
    }, 

nota el ajuste globals en la parte inferior. Esto le permite a JSHint ignorar estas variables, pero aún ejecuta su configuración undef: true (como se muestra arriba).

+0

perfecto! ¡Gracias! Estaba bastante seguro de que tenía que haber una manera fácil de hacerlo, pero la documentación de gruñido no era muy clara y no tenía experiencia previa con JSHint. ¡Gracias de nuevo! – timkg

+2

Agregar algo como 'core.js' al ejemplo' globals' en la respuesta ayudaría a la claridad. Venía de una perspectiva de Web Storm preguntándome cómo agregaría los elementos definidos en mi propia lib antes de darme cuenta de que podía agregarlos al archivo. También podría mencionar que puede agregar las opciones a solo un archivo con la clave global '/ *: valor, .. * /' sintaxis – Snekse

+2

Continué obteniendo "'foo' no está definido" hasta que moví los globales objeto dentro del objeto de opciones. –

0

Un enfoque alternativo (que no se basa en ronco) consiste en añadir un comentario jshint en sus archivos JS:

/* global Backbone, jQuery, _ */ 
+1

Y si su script necesita asignar un valor a un global, agregue ': true' (sin espacios) después de él. Por ejemplo, '/ * global Backbone, jQuery: true, _ * /' –

Cuestiones relacionadas