2015-06-06 11 views
9

Esiste un modo per escludere una cartella da una build in un Brocfile (o in qualsiasi altro luogo). Il caso d'uso è l'imballaggio, dove ho un'app fatta di sotto-app all'interno dei pod. per esempio.Escludi cartelle da build in Brocfile

/app/modules/components 
/app/modules/app1 
/app/modules/app2 
/app/modules/app3 

Mi piacerebbe costruirli tutti quando l'ambiente è impostato su "sviluppo" o solo ad es. 'app1' quando l'ambiente è 'app1'. Eventuali suggerimenti?

Ho provato diverse combinazioni di broccoli-file-remover, broccoli-funnel e broccoli-merge-trees inutilmente.

var removeFile = require('broccoli-file-remover'); 

module.exports = removeFile(app.toTree(), { 
    paths: ['app/modules/pod1/', 'app/modules/pod2/'] 
}); 

risposta

2

Ah, quindi dopo aver effettivamente pensato a questo chiaramente, tutto sta funzionando esattamente esattamente come previsto nel mio esempio precedente.

Ovviamente non stavo prestando abbastanza attenzione. app.toTree() è troppo tardi per eseguire questa operazione, poiché tutto è già stato creato e concatenato.

Fortunatamente, ember-cli consente agli addon di modificare gli alberi appropriati in varie fasi del ciclo di vita.

Vedere: https://github.com/ember-cli/ember-cli/blob/master/ADDON_HOOKS.md per ulteriori dettagli su quali ganci sono attualmente disponibili.

Il gancio che dovrebbe fare il trucco è Addon.prototype.postprocessTree. Ora abbiamo due scelte, possiamo costruire un addon standalone, via ember addon o possiamo creare un addon in-repo leggero via ember g in-repo-addon. Tipicamente per questi tipi di situazioni, preferisco i re-add-in-repo poiché non richiedono un secondo progetto, ma per il resto sono uguali.

  1. brace g-repo-addon rimuovere
  2. abbiamo bisogno di installare i broccoli-spezzatino tramite npm install --save broccoli-stew
  3. includerlo var stew = require('broccoli-stew');
  4. aggiungi hook postprocessTree al componente aggiuntivo
  5. quando il processo di postelaborazione è per il tipo che ci interessa, usa lo stufato di broccoli per rimuovere le directory non più a nostra cura.

La richiesta di pull risultante: https://github.com/WooDzu/ember-exclude-pod/pull/1

Nota: ho notato template non era uno dei tipi disponibili in post elaborazione, così ho aggiunto: https://github.com/ember-cli/ember-cli/pull/4263 (dovrebbe essere parte della prossima brace-cli stampa)

Nota: abbiamo davvero vogliamo un gancio aggiuntivo Addon.prototype.preprocessTree, come ad ignorare i file prima di addirittura costruire.Ho aperto un problema correlato: https://github.com/ember-cli/ember-cli/issues/4262

uscita dei passaggi precedenti

var stew = require('broccoli-stew'); 

module.exports = { 
    name: 'remove', 

    isDevelopingAddon: function() { 
    return true; 
    }, 

    postprocessTree: function(type, tree){ 
    if (type === 'js' || type === 'template') { 
     return stew.rm(tree, '*/modules/pod{1,2}/**/*'); 
    } else { 
     return tree; 
    } 
    } 

}; 
+0

in-repo-addon insieme al # 4263 fai il trucco. You rock man – WooDzu

+0

è possibile non eseguire questi passaggi durante i test – BillPull

3

Sono abbastanza sicuro che rm broccoli-stufati gestirà correttamente questo.

https://github.com/stefanpenner/broccoli-stew/blob/master/lib/rm.js#L4-L40 ci sono anche i test che mettono alla prova uno scenario molto simile: https://github.com/stefanpenner/broccoli-stew/blob/master/tests/rm-test.js#L48-L57

var stew = require('broccoli-stew'); 
module.exports = stew.rm(app.tree(), 'app/modules/{pod1,pod2}'); 

Se questo non funziona, si sentono liberi di aprire un problema su broccoli-stufato. Assicurati di fornire un esempio in esecuzione anche se

+0

Hi @Stefan . Nessuna gioia finora. Ho creato un repository per riprodurre il problema, devo segnalare in broccoli-stufato o broccolli-funnel che sembra essere usato internamente in stew.rm()? – WooDzu

+1

sei corretto –

0

Questo è davvero in ritardo, ma ho creato un plugin Broccoli di fare proprio questo. È disponibile allo https://www.npmjs.com/package/broccoli-rm.

(Il trucco è quello di rilevare se un percorso escluso è una cartella, e quindi utilizzare un match glob per assicurarsi che nessuno dei bambini della cartella ottenere un link simbolico durante la copia.)

var rm = require('broccoli-rm'); 
var input = app.toTree(); 
module.exports = output = rm([input], { 
    paths: ['app/modules/pod1', 'app/modules/pod2'] 
}); 
+0

Welcome to Stack Overflow! Mentre questo può teoricamente rispondere alla domanda, [sarebbe preferibile] (// meta.stackoverflow.com/q/8259) per includere qui le parti essenziali della risposta e fornire il link per riferimento. – manetsus