2015-12-26 8 views
5

मेरे पास एक एडन है जिसे जेएस फाइलों के सेट को अपनी बॉवर निर्देशिका से एम्बर ऐप की /dist की रूट में कॉपी करने की आवश्यकता है (यह सेवा श्रमिकों से जुड़े नियमों को स्कॉइंग करने के लिए है)। मैंने सोचा कि शायद मैं treeForApp हुक का उपयोग कर सकता हूं लेकिन मुझे कोई त्रुटि नहीं मिल रही है, मुझे वांछित परिणाम भी नहीं मिल रहा है।रूट निर्देशिका में फ़ाइलों को जोड़ने के लिए एम्बर एडन

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

नोट: मैंने सोचा था कि मैं बस index.jspostBuild हुक के हिस्से के रूप जावास्क्रिप्ट फाइलों को कॉपी करके इस समस्या को हल करने में सक्षम हो सकता है, लेकिन जब यह करता है जेएस फ़ाइलों को डिस्ट फ़ोल्डर की जड़ में डाल दें, यह एम्बर-क्ली के ember serve द्वारा स्पष्ट रूप से नहीं किया जाता है, अगर इसकी निर्माण पाइपलाइनों में से किसी एक के माध्यम से धक्का नहीं दिया जाता है।

स्टीफन पेनर अब बताया गया है dist निर्देशिका डेवलपर्स को देखने के लिए के लिए लेकिन प्रस्तुति वास्तव में tmp निर्देशिका संरचना के भीतर किया है ... इस बताता है कि क्यों मेरी "हैक" काम नहीं किया।

+0

क्या आपने डिफ़ॉल्ट ब्लूप्रिंट 'this.addBowerPackageToProject ('upup.js') 'के साथ आयात करने का प्रयास किया है? – Bek

+0

@Bek 'addBowerPackageToProject' फ़ाइलों को bower_components निर्देशिका में प्राप्त करने का पहला चरण है। मुझे वहां से क्या करना है, दो जेएस फाइलों को अपने प्रारंभिक स्थान से एप्लिकेशन बिल्ड (उर्फ, '/ dist' फ़ोल्डर) की जड़ तक ले जाना है। यह महत्वपूर्ण है क्योंकि यदि वे वितरण की जड़ पर नहीं रहते हैं तो सेवा कार्यकर्ता के पास सभी पृष्ठों की संपत्तियों के साथ बातचीत करने की क्षमता नहीं होगी। – ken

+0

यदि आपके पास पहले से 'addBowerPackageToProject' है तो आपको' include 'hook में' app.import() 'के माध्यम से मुख्य 'index.js' में आयात करने की आवश्यकता है, क्या आपने कोशिश की है? यदि नहीं, तो मैं इसे एक उत्तर के रूप में लिखूंगा? – Bek

उत्तर

4

ऐसा लगता है कि मेरा प्रारंभिक प्रयास पूरी तरह से दूर नहीं था।

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

आशा है कि मदद करता है: यह तुम इतनी तरह treeForPublic हुक में हुक करने की जरूरत है काम करने के लिए।

संबंधित मुद्दे