2015-12-26 28 views
5

Mam dodatek, który musi skopiować zestaw plików JS z ich katalogu altówkowego do katalogu głównego Ember aplikacji z /dist (jest to w celu określenia reguł związanych z pracownikami serwisu). Pomyślałem, że mógłbym użyć haka treeForApp, ale gdy nie dostaję żadnych błędów, również nie uzyskuję pożądanego rezultatu.Dodatek Ember do dodawania plików do katalogu głównego

index.js jest:

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); 
    }, 

Uwaga: Myślałem, że mogę być w stanie rozwiązać ten problem, po prostu kopiowanie plików javascript w ramach index.jspostBuild haka ale gdy to robi umieść pliki JS w katalogu głównym folderu dist, który nie jest obsługiwany przez ember-cli, ember serve, widocznie, jeśli nie zostanie przepchnięty przez jedną z jego kompilowanych potoków.

Stefan Penner zwrócił uwagę na to, że katalog dist jest przeznaczony dla programistów, ale serwowanie odbywa się w ramach struktury katalogów tmp ... to wyjaśnia, dlaczego mój "hack" nie zadziałał.

+0

Czy próbowałeś zaimportować z domyślnym schematem 'this.addBowerPackageToProject ('upup.js')'? – Bek

+0

@Bek 'addBowerPackageToProject' jest pierwszym krokiem do przeniesienia plików do katalogu bower_components. To, co muszę zrobić, to przenieść dwa pliki JS z początkowej lokalizacji do katalogu głównego kompilacji aplikacji (zwanego też folderem '/ dist'). Jest to ważne, ponieważ jeśli nie znajdują się w katalogu głównym dystrybucji, pracownik serwisu nie będzie miał możliwości interakcji ze wszystkimi zasobami stron. – ken

+0

jeśli masz już 'addBowerPackageToProject', musisz zaimportować je w głównym' index.js' przez 'app.import()' w hook 'include', czy próbowałeś tego? jeśli nie, napiszę to jako odpowiedź? – Bek

Odpowiedz

4

Wygląda na to, że moja pierwsza próba nie była całkiem odległa. Aby to działało trzeba podpiąć do haka treeForPublic tak:

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); 
    } 
} 

nadzieję, że pomoże.