IE10 + (ES6 modülü yükleme yok, vb.) İçin çalışması gereken eski bir uygulamada bazı kütüphane kodu için IIFE işlevleri var .
Ancak, ES6 ve TypeScript kullanacak bir React uygulaması geliştirmeye başladım ve dosyaları çoğaltmadan zaten sahip olduğum kodu yeniden kullanmak istiyorum. Biraz araştırma yaptıktan sonra, bu kütüphane dosyalarının hem <script src=*>
içe aktarma olarak çalışmasına hem de React uygulamasının ES6 modülü yüklemesi yoluyla içe aktarmasına izin vermek için bir UMD kalıbı kullanmak istediğimi buldum .
Aşağıdaki dönüşümü buldum:
var Utils = (function(){
var self = {
MyFunction: function(){
console.log("MyFunction");
}
};
return self;
})();
için
(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");
};
})));
Bu, Import Utils from './Utils.js'
komut aracılığıyla yüklemeye ve ayrıca bir komut dosyası etiketi kullanılarak eklenmesine izin verir<script src='Utils.js'></script>
Bununla birlikte, IIFE'mden bazıları diğer IIFE'leri bağımlılık olarak kullanıyor (kötü biliyorum ama gerçek).
var Utils = Utils; // Used to indicate that there is dependency on Utils
var RandomHelper = (function(){
var self = {
DoThing: function(){
Utils.MyFunction();
}
};
return self;
})();
Doğru açarsanız RandomHelper
ve Utils
alınabilir dosyalar halinde, uygulama, bu teknikle uyumlu değildir yanıt verin. Basitçe
Import Utils from './Utils.js'
Import RandomHelper from './RandomHelper.js'
çalışmıyor çünkü Utils'in pencere kapsamı olmadığına inanıyorum. Sorunsuz bir şekilde yüklenir, ancak RandomHelper.DoThing()
Utils'in tanımlanmadığını atar.
Eski uygulamada
<script src='Utils.js'></script>
<script src='RandomHelper.js'></script>
kusursuz çalışır.
RandomHelper'ın bir React uygulamasında Utils'i nasıl kullanabileceğimi, IE ve ES5 uyumlu tuttuğunu, ancak yine de reaksiyonda çalışabileceğini nasıl anlayabilirim. Belki bir şekilde bir pencere / genel değişken ayarlıyor?
Not: ES6 modülünün yüklenmesinin, bağımlılıklarla uğraşmak olduğunu ve mevcut IIFE'lerimin ideal olmadığını anlıyorum. Sonunda es6 sınıflarını ve daha iyi bağımlılık kontrolünü değiştirmeyi planlıyorum ama şimdilik yeniden yazma olmadan mevcut olanı kullanmak istiyorum