2013-07-23 5 views
5

ho diversi file di nome:grugnito-contrib-caffè one-to-one compilare

  • jquery.abcoffee
  • jquery.accoffee
  • jquery.adcoffee

e sono tutti compilati in un file jquery.js nella mia directory di output.

Anche se penso che in alcuni casi questo comportamento potrebbe essere piacevole, mi piacerebbe che fossero compilati in diversi file come jquery.a.b.js, jquery.a.c.js e così via. Come posso dire a grunt-contrib-coffeescript di farlo?

mio Gruntfile.js assomiglia a questo:

module.exports = function (grunt) { 
    grunt.initConfig({ 
     coffee: { 
      dist: { 
      files: [{ 
       expand: true, 
       flatten: true, 
       cwd: 'app/webroot/coffee', 
       src: ['{,*/}*.coffee'], 
       dest: 'app/webroot/js', 
       ext: '.js' 
      }] 
      } 
     } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-coffee'); 

}; 

Grazie per il vostro aiuto!

risposta

10

Il problema si trova sul nome del file che hanno più punti.
Se fosse jquery-a-b.coffee, jquery-a-c.coffee ecc., Avresti visto l'uscita prevista.

È un noto issue (l'estensione è successiva solo all'ultimo periodo) e gli sviluppatori grunt hanno fatto apposta.
Qui è una citazione da uno di loro:

Ci sono due modi ext potrebbe funzionare; potrebbe prendere in considerazione tutto dopo lo il primo punto dell'estensione o tutto dopo l'ultimo punto l'estensione . Abbiamo scelto il primo perché il caso d'uso è più comune (noi incontriamo i file .min.js tutto il tempo). Detto questo, è possibile utilizzare l'opzione di rinomina per specificare una funzione che utilizzerà qualsiasi logica di denominazione personalizzata necessaria.

Quindi, l'unica soluzione per ora è quello di rimuovere ext e utilizzare rename come questo:

coffee: { 
    dist: { 
    files: [{ 
     expand: true, 
     cwd: 'app/webroot/coffee', 
     src: ['{,*/}*.coffee'], 
     dest: 'app/webroot/js', 
     rename: function(dest, src) { 
     return dest + '/' + src.replace(/\.coffee$/, '.js'); 
     } 
    }] 
    } 
} 

Update come di Grunt 0.4.3:
È ora possibile utilizzare la extDot option con ext

ext: '.js', 
extDot: 'last' 
+0

Perché è necessario 'appiattire: true'? –

+2

@KrisKhaira Credo che l'opzione 'flatten' non sia necessaria in questo caso, quindi l'ho rimossa dalla mia risposta. Grazie per averlo notato. – mutil

3

Questo funziona in modo da non dover aggiungere i file a mano nel vostro gruntFile:

coffee: { 
    glob_to_multiple: { 
    expand: true, 
    flatten: true, 
    cwd: 'app/webroot/coffee/', 
    src: ['*.coffee'], 
    dest: 'app/webroot/', 
    ext: '.js' 
    } 
}, 
  1. CWD: la cartella in cui i file sono
  2. src: l'abbinamento pattern per i tuoi file, usando glob
  3. dest: la cartella in cui stanno andando i tuoi file.

Vedi https://github.com/gruntjs/grunt-contrib-coffee#usage-examples per qualche campione usages

+0

non sono lì altre opzioni, che sarebbe un sacco di file parlare –

+1

Ho modificato la mia risposta – edi9999

+0

Okay, questa soluzione non è così compilare qualsiasi cosa. –