2012-12-30 11 views
11

Per una pagina singola applicazione che sto lavorando, ho la seguente struttura:Come copiare i file di giada compilati in una cartella di destinazione utilizzando grugnito

  • dist
    • css
    • js
    • lib
    • parziali
    • index.html
  • src
    • css
    • js
    • lib
    • Visto
      • parziali
      • index.jade

La directory dist verrà utilizzata dal server Express per servire il progetto. Ho compiti grugnito banali (utilizzando grugnito-contrib-pulito, grugnito-contrib-copia) per la pulizia dist e la copia src/css, src/js, src/lib a dist.

Il problema si trova con src/views. Questa directory contiene i file jade che devono essere compilati in file html. Dopo la compilazione li voglio in dist (index.html nella radice dist, partial come sottodir).

Al momento sto utilizzando l'attività grunt-contrib-jade per compilare e copiare i file di giada. Voglio copiarli su dist, dato che non voglio aggiungere i file html compilati al controllo del codice sorgente. Ma ora questo non è davvero praticabile, dal momento che è necessario specificare tutti i file di giada (ora ci sono solo pochi, ma che cresceranno):

jade: { 
     compile: { 
      options: { 
       pretty: true 
      }, 
      files: { 
       // TODO make one line 
       'dist/index.html': ['src/views/index.jade'], 
       'dist/partials/banner.html': ['src/views/partials/banner.jade'], 
       'dist/partials/dashboard.html': ['src/views/partials/dashboard.jade'], 
       'dist/partials/navbar.html': ['src/views/partials/navbar.jade'], 
       'dist/partials/transfer.html': ['src/views/partials/transfer.jade'] 
      } 
     } 
    }, 

Esiste un modo per utilizzare il grugnito-contrib-giada compito (o un altro) con un filtro di directory? Ti piace questa:

jade: { 
     compile: { 
      options: { 
       pretty: true 
      }, 
      dir: { 
       'dist': ['src/views'] 
      } 
     } 
    } 
+0

Hai provato il "Formato array di file" [descritto qui] (https://github.com/gruntjs/grunt/wiki/Configuring-tasks)? L'esempio (usando l'attività concat) imposta la proprietà 'dest' in una directory:' file: [{src: ['src/bb.js', 'src/bbb.js'], destinazione: 'dest/b/'}] '. È probabile che il task 'jade-contrib' supporti anche questo formato. – smithclay

+0

Non ha funzionato. Ha copiato tutti i file in un unico file chiamato '* .html' :) Provato file: grunt.file.expandMapping (['**/*. Jade'], 'dist', {cwd: 'src/views'}) 'descritto nella stessa pagina, ma sto ottenendo expandMapping non è definito. – asgoth

risposta

10

ho finito per l'aggiornamento a grugnire 0.4 (che causa alcuni altri problemi, ma che sarò in grado di gestire).

Con versione grunt 0.4 è possibile utilizzare grunt.file.expandMapping:

jade: { 
     compile: { 
      options: { 
       pretty: true 
      }, 
      files: grunt.file.expandMapping(['**/*.jade'], 'dist/', { 
       cwd: 'src/views', 
       rename: function(destBase, destPath) { 
        return destBase + destPath.replace(/\.jade$/, '.html'); 
       } 
      }) 

     } 
    }, 
+0

ha finito per usare qualcosa di simile a questo, e ha funzionato perfettamente. Grazie! – uxtx

20

Poco chiarimenti Grunt wiki - expand mapping:

grunt.file.expandMapping(patterns, dest [, options]) 

nota che mentre questo metodo può essere utilizzato per generare di programmazione di una matrice di file per un'attività più, la dichiarativa la sintassi per fare ciò descritto nella sezione "Creazione dinamica dell'oggetto file" di Configuring tasks guide è preferibile.

Supponendo quanto sopra, la configurazione sarà simile a questa:

files: [ { 
    expand: true, 
    src: "**/*.jade", 
    dest: "dist/", 
    cwd: "src/views", 
    ext: '.html' 
} ]; 

stesso risultato con la configurazione dichiarativa.

+1

+1: questa è davvero un'opzione. la funzione di rinomina non è necessaria nemmeno, poiché l'attributo ext fa il lavoro. Tuttavia, è necessaria la versione 0.4 di grunt, ciò che non era chiaro all'inizio. – asgoth

+2

Non so perché, ma devo rimuovere [] file di forma: quindi 'file: {...}' funziona per me e 'file: [{...}]' errore di lancio 'L'oggetto # non ha method 'indexOf'' – netsmertia

+0

+1: L'opzione 'ext' era ciò che mi mancava. – Seth

3

Se si desidera cambiare solo l'estensione dei file da .jade a .html, un'altra opzione sarebbe utilizzando le flatten e ext parametri in questo modo:

jade: { 
    compile: { 
     options: { 
      data: { debug: false, title: 'My awesome application' } 
     }, 
     files: grunt.file.expandMapping(['**/*.jade'], '<%= yeoman.dist %>/views', { 
      cwd: '<%= yeoman.app %>/views', 
      flatten: true, 
      ext: '.html' 
     }) 
    } 
} 

o meglio ancora (come spiegato here) :

jade: { 
    compile: { 
     options: { 
      data: { debug: false, title: 'My awesome application' }, 
      pretty: true 
     }, 
     files: [ 
      { 
       expand: true, 
       cwd: '<%= yeoman.app %>/views', 
       src: ['**/*.jade'], 
       dest: '<%= yeoman.dist %>/views', 
       ext: '.html' 
      } 
     ]} 
} 

Grazie.

Problemi correlati