मैं एक विरासत आवेदन में कुछ पुस्तकालय कोड के लिए IIFE कार्य करता है जिसे IE10 + (कोई ES6 मॉड्यूल लोडिंग, आदि) के लिए काम करने की आवश्यकता होती है।
हालांकि, मैं एक रिएक्ट ऐप विकसित करना शुरू कर रहा हूं जो ES6 और टाइपस्क्रिप्ट का उपयोग कर रहा होगा और मैं उन कोड का पुन: उपयोग करना चाहता हूं जो मेरे पास पहले से ही फ़ाइलों को डुप्लिकेट किए बिना हैं। थोड़ा शोध के बाद मैंने पाया कि मैं इन लाइब्रेरी फ़ाइलों को <script src=*>
आयात के रूप में काम करने के लिए और रिएक्ट ऐप को ES6 मॉड्यूल लोडिंग के माध्यम से आयात करने की अनुमति देने के लिए एक UMD पैटर्न का उपयोग करना चाहता हूं ।
मैं निम्नलिखित रूपांतरण के साथ आया:
var Utils = (function(){
var self = {
MyFunction: function(){
console.log("MyFunction");
}
};
return self;
})();
सेवा
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.Utils = {})));
}(this, (function (exports) {
exports.MyFunction = function(){
console.log("MyFunction");
};
})));
यह Import Utils from './Utils.js'
कमांड के माध्यम से लोड करने की अनुमति देगा और स्क्रिप्ट टैग का उपयोग करके इसे डालने की भी अनुमति देगा<script src='Utils.js'></script>
हालांकि, मेरे कुछ IIFE अन्य IIFE का उपयोग एक निर्भरता के रूप में करते हैं (बुरा मुझे पता है लेकिन एक वास्तविकता है)।
var Utils = Utils; // Used to indicate that there is dependency on Utils
var RandomHelper = (function(){
var self = {
DoThing: function(){
Utils.MyFunction();
}
};
return self;
})();
यदि सही तरीके से RandomHelper
और Utils
फ़ाइलों में आयात किया जा सकता है, तो रिएक्ट ऐप इस तकनीक के अनुकूल नहीं है। बस कर रहा है
Import Utils from './Utils.js'
Import RandomHelper from './RandomHelper.js'
काम नहीं करता है क्योंकि मेरा मानना है कि यूटिल्स खिड़की के झुलसे नहीं हैं। यह बिना इश्यू के लोड हो RandomHelper.DoThing()
जाएगा लेकिन फेंक देगा कि यूटिल्स परिभाषित नहीं है।
विरासत ऐप में
<script src='Utils.js'></script>
<script src='RandomHelper.js'></script>
निर्दोष रूप से काम करता है।
मैं रैंडम हेल्पर को एक रिएक्ट ऐप में यूटिल्स का उपयोग करने में सक्षम कैसे हो सकता हूं, यह आईई और ईएस 5 को संगत रखते हुए लेकिन फिर भी प्रतिक्रिया में काम करता है। शायद किसी तरह एक खिड़की / वैश्विक चर सेट?
पुनश्च: मैं समझता हूं कि ES6 मॉड्यूल लोडिंग का बिंदु निर्भरता से निपटने के लिए है और मेरे मौजूदा IIFE आदर्श नहीं हैं। मैं अंततः es6 वर्गों और बेहतर निर्भरता नियंत्रण पर स्विच करने की योजना बना रहा हूं, लेकिन अब मैं व्हाट्सएप का उपयोग फिर से लिखने के बिना करना चाहता हूं