2015-12-26 27 views
5

Ho un addon che deve copiare un set di file JS dalla loro directory bower alla radice dell'app Ember di /dist (questo è per le regole di scoping associate agli addetti ai servizi). Ho pensato che forse avrei potuto usare il gancio treeForApp ma mentre non ricevo errori, inoltre, non ottengo il risultato desiderato.Addon Ember per aggiungere file alla directory radice

Il index.js è:

const Funnel = require('broccoli-funnel'); 

module.exports = { 
    name: 'ember-upup', 
    treeForApp: function(tree) { 
    tree = new Funnel(tree, { include: 
     [ 
     'bower_components/upup/dist/upup.min.js', 
     'bower_components/upup/dist/upup.sw.min.js' 
     ]}); 

    return this._super.treeForApp.call(this, tree); 
    }, 

Nota: ho pensato che potrei essere in grado di risolvere questo problema semplicemente copiando i file JavaScript come parte di index.jsPostbuild gancio ma mentre questo non metti i file JS nella radice della cartella dist che non è servita da Ember-cli ember serve apparentemente se non viene spinto attraverso una delle sue pipeline di compilazione.

Stefan Penner ha ora indicato che la directory dist è destinata agli sviluppatori, ma il servizio viene effettivamente eseguito all'interno della struttura della directory tmp ... questo spiega perché il mio "hack" non ha funzionato.

+0

hai provato a importare con il progetto predefinito 'this.addBowerPackageToProject ('upup.js')'? – Bek

+0

@Bek 'addBowerPackageToProject' è il primo passo per ottenere i file nella directory bower_components. Quello che devo fare da lì è spostare due file JS dalla loro posizione iniziale alla radice della build dell'applicazione (ovvero, la cartella '/ dist'). Questo è importante perché se non risiedono nella radice della distribuzione, il lavoratore del servizio non avrà la possibilità di interagire con tutte le risorse delle pagine. – ken

+0

se hai già 'addBowerPackageToProject', allora devi importarli nel principale' index.js' tramite 'app.import()' in 'include' hook, hai provato? se no, lo scriverò come risposta? – Bek

risposta

4

Sembra che il mio primo tentativo non sia stato del tutto lontano. Per farlo funzionare è necessario collegare nel gancio treeForPublic in questo modo:

const path = require('path'); 
const Funnel = require('broccoli-funnel'); 
const mergeTrees = require('broccoli-merge-trees'); 
const JS_FILES = ['upup.min.js', 'upup.sw.min.js']; 

module.exports = { 
    treeForPublic: function() { 
    const upupPath = path.join(this.app.bowerDirectory, 'upup/dist'); 
    const publicTree = this._super.treeForPublic.apply(this, arguments); 
    const trees = []; 
    if (publicTree) { 
     trees.push(publicTree); 
    } 
    trees.push(new Funnel(upupPath, { 
     include: JS_FILES, 
     destDir: '/' 
    })); 

    return mergeTrees(trees); 
    } 
} 

Speranza che aiuta.

Problemi correlati