2015-05-29 17 views
6

Sto cercando di sostituire alcuni segnaposti in file diversi durante la copia. Il mio gruntfile funziona bene, ma aggiungendo l'opzione di processo per fare le sostituzioni, non funziona. Qui di seguito è la sezione dedicata del mio gruntfile:sintassi grunt-contrib-copy per confusione opzione di processo

grunt.initConfig({ 

    copy: { 
     js: { 
      files: [{ 
       expand: true, 
       cwd: 'src/wp-content/themes/pilau-starter/', 
       src: ['**/*.js'], 
       dest: 'public/wp-content/themes/pilau-starter/' 
      }], 
      options: { 
       process: function (content) { 
        console.log(content); 
        content = content.replace(/pilauBreakpointLarge/g, breakpoints.large); 
        content = content.replace(/pilauBreakpointMedium/g, breakpoints.medium); 
        return content; 
       } 
      } 
     }, 
    } 

}); 

I percorsi possono essere compresi nel contesto del codice su GitHub: https://github.com/pilau/starter (la directory pubblico non si è impegnata per il repo, perché è un tema di avviamento). Questi percorsi sono variabili nel mio Gruntfile originale e funzionano bene in tutte le altre attività.

Tutti i vars sono impostati OK. Ho incluso lo console.log(content) per verificare se la funzione di processo è effettivamente in esecuzione, non sembra esserlo, quindi suppongo sia una sintassi di base.

C'è una risposta (https://stackoverflow.com/a/28600474/1087660) che sembra risolvere questo problema, ma per quanto posso dire, questo modo di farlo è semplicemente una sintassi JS errata - non so come sia stata contrassegnata come corretta.

--verbose uscita per l'esecuzione di attività di copia:

Running "copy:js" (copy) task 
Verifying property copy.js exists in config...OK 
Files: src/wp-content/themes/pilau-starter/js/admin.js -> public/wp-content/themes/pilau-starter/js/admin.js 
Files: src/wp-content/themes/pilau-starter/js/flickity.js -> public/wp-content/themes/pilau-starter/js/flickity.js 
Files: src/wp-content/themes/pilau-starter/js/global.js -> public/wp-content/themes/pilau-starter/js/global.js 
Files: src/wp-content/themes/pilau-starter/js/modernizr.js -> public/wp-content/themes/pilau-starter/js/modernizr.js 
Files: src/wp-content/themes/pilau-starter/js/picturefill.js -> public/wp-content/themes/pilau-starter/js/picturefill.js 
Files: src/wp-content/themes/pilau-starter/js/respond.js -> public/wp-content/themes/pilau-starter/js/respond.js 
Options: processContent=false, processContentExclude=[], process=undefined 
Options: processContent=false, processContentExclude=[], process=undefined 
Copying src/wp-content/themes/pilau-starter/js/admin.js -> public/wp-content/themes/pilau-starter/js/admin.js 
Reading src/wp-content/themes/pilau-starter/js/admin.js...OK 
Writing public/wp-content/themes/pilau-starter/js/admin.js...OK 
+1

Qual è l'uscita se si esegue l'attività con la bandiera '--verbose'? Inoltre, l'opzione 'nonull' può essere utile durante il debug. – steveax

+0

Quale versione di 'grunt-contrib-copy' stai usando? Puoi provare a usare 'processContent' invece di' process' perché è stato usato in v0.4.1 e precedenti. Puoi anche provare a registrare i tuoi 'breakpoints.large' e' breakpoints.medium', forse non sono impostati correttamente nella tua configurazione ... – nemesv

+0

I file vengono copiati sull'output quando viene eseguito? +1 sul suggerimento '--verbose'. – James

risposta

2

La tua versione di grunt-contrib-copy è 0.4.0. Come correttamente indicato da @nemesv sopra il nome della proprietà da utilizzare in questa versione sarebbe processContent non process.

Ho clonato il repository e passato al ramo json-breakpoints. E ha funzionato grunt copy:js e ha sostituito il contenuto.

original-content replaced-content

Ora, quando si esegue grunt copy:js --verbose sarà ancora mostrare questa

cli

processContent viene registrato indefinito perché grugnito utilizza JSON.stringify per registrare un valore. E JSON.stringify restituisce undefined quando si passa a una definizione di funzione.


Se siete interessati, ecco il metodo per accedere reponsible tutta l'opzione

Log.prototype.writeflags = function(obj, prefix) { 
     var wordlist; 
     if (Array.isArray(obj)) { 
      wordlist = this.wordlist(obj); 
     } else if (typeof obj === 'object' && obj) { 
      wordlist = this.wordlist(Object.keys(obj).map(function(key) { 
       var val = obj[key]; 
       return key + (val === true ? '' : '=' + JSON.stringify(val)); 
      })); 
     } 
     this._writeln((prefix || 'Flags') + ': ' + (wordlist || '(none)'.cyan)); 
     return this; 
    }; 
0

Questo non sembra essere un problema con l'opzione process a tutti, ma più un problema con srcThemeDir. Vorrei registrarlo per assicurarmi di sapere esattamente di cosa si tratta, in quanto sembra che stia causando l'attività copy per non trovare alcun file (e quindi non chiamare la funzione di processo).

+0

Scusa, ho dimenticato di spegnerlo. L'ho sostituito con il valore impostato. La var funziona bene per tutto il resto. Vedi anche l'output di '--verbose' nella modifica sopra - i file sono stati trovati OK, sembra. Qualsiasi modifica apportata viene copiata: solo la sostituzione non sta avvenendo. –