2015-09-10 7 views
6

systemjs के साथ काम करने कोणीय (1.x) प्राप्त करने के लिए प्रयास करते समय मुझे एहसास हुआ कि वहाँ वर्तमान में क्षमता (है कि मैं के बारे में पता) स्वचालित रूप से कोणीय घटकों में $inject डालने के लिए है, जो कार्यों के लिए भी जब तर्क काम कर रहे घटक रहता नहीं है कि minifier द्वारा उलझन में हैं। मैन्युअल $inject एनोटेशन बनाने थकाऊ, त्रुटियां उत्पन्न हो सकती और सूखी प्रिंसिपल का उल्लंघन करती है।क्या सिस्टमजेएस प्लगइन्स पहले से ही संकलित फाइलों को संशोधित कर सकता है?

एक परिपक्व NPM मॉड्यूल ng-annotate कहा जाता है जो इस समस्या का हल और bundling के लिए इसी तरह के कई स्थितियों में इस्तेमाल किया जाता है। जैसा कि मैं SystemJS की खोज कर रहा हूं, मुझे लगता है कि एक प्लगइन सिस्टम है जिसमें स्रोत कोड का अनुवाद करने की क्षमता शामिल है, जो वास्तव में ng-annotate करता है।

से मैं क्या देख सकते हैं, हालांकि, SystemJS केवल आप एक ही लोडर के लिए एक विशेष फाइल एक्सटेंशन मैप करने के लिए क्षमता और प्लग इन के सभी उदाहरण देता है एक नया फ़ाइल प्रकार का समर्थन कर रहे हैं। मैं एक नई फ़ाइल प्रकार जोड़ने के बजाय सिस्टमजेएस की ट्रांसलेशन प्रक्रिया के आउटपुट को पोस्ट-प्रोसेस करना चाहता हूं। ऐसा लगता है कि SystemJS ऐसा करने में सक्षम होना चाहिए क्योंकि इसमें प्रसंस्करण पाइपलाइन है, लेकिन मैं यह समझ नहीं पा रहा हूं कि इसे सही तरीके से कैसे लगाया जाए। अभी मैं उसी प्रभाव को प्राप्त करने के लिए ब्राउज़र का उपयोग कर रहा हूं, लेकिन मैं बिल्ड कार्यों के एक जटिल सेट के साथ समाप्त हो गया हूं और यदि संभव हो तो मैं सिस्टमजेएस के साथ इसे सरल बनाना चाहता हूं।

अन्य रणनीतियों लोडर पाइप लाइन में ng-annotate का उपयोग करने के साथ SystemJS भी सराहना की जाएगी सक्षम होने के लिए।

+0

आप इनलाइन सरणी एनोटेशन का उपयोग क्यों नहीं करते? –

+0

क्योंकि कोड की शैली जो मैं लिख रहा हूं वह अनुकूल नहीं है। मैं टाइपस्क्रिप्ट में लिख रहा हूं जहां मेरी अधिकांश सेवाएं कक्षाओं के रूप में समाप्त होती हैं और मैं अपनी सेवाओं को मॉड्यूल के साथ एक अलग फ़ाइल में पंजीकृत करता हूं, न कि सेवा के समान फ़ाइल में। साथ ही, '$ इंजेक्ट' के साथ यह * DRY * का उल्लंघन करता है। अंत में, कोणीय प्रश्न का प्राथमिक विषय नहीं है। –

उत्तर

2

आखिरकार मैं एक तरीका खोज निकाला है, लेकिन यह वास्तव में भद्दा लगता है। ऐसा करने के लिए System.src स्वयं hook() फ़ंक्शन का उपयोग करता है, लेकिन इसे उपयोग के लिए निर्यात नहीं किया जाता है। मैं आभारी किसी भी तरीके इस सुधार करने के लिए और मुझे आशा है कि अंततः लोडर कार्यक्षमता चेनिंग के लिए एक ठीक से समर्थित तंत्र उपलब्ध हो जाता है के लिए होगा:

var System = require('systemjs'); 
 
var systemTranslate = System.translate; 
 
System.translate = function(load) { 
 
    return systemTranslate.call(this, load).then(function (result) { 
 
    if (result) { 
 
     var processedResult = result; // Do your processing here. 
 
     load.source = processedResult; 
 
    } 
 
    return load.source; 
 
    }); 
 
}

मैं इस के साथ ज्यादा प्रयोग नहीं किया है, के बाद से मेरी सिस्टम.जेएस बिल्डिंग के लिए विशेष उपयोग के मामले वर्तमान में एक मृत अंत है (टाइपस्क्रिप्ट स्रोत-मानचित्र अभी भी बस्टेड हैं), लेकिन संभवतः आप एक वादा भी वापस कर सकते हैं।

मैं इस सवाल का जवाब है, तो किसी को भी कुछ बेहतर सलाह है देखने के लिए थोड़ी देर के लिए संयुक्त राष्ट्र-चुने छोड़ देंगे।

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