私が持っている生命維持の IE10 +(ノーES6モジュールのロードなど)のために働く必要があるとレガシー・アプリケーションのライブラリのコードの一部についての機能を。
しかし、私はES6とTypeScriptを使用するReactアプリの開発を開始しており、ファイルを複製せずに既存のコードを再利用したいと考えています。少し調べた結果、UMDパターンを使用して、これらのライブラリファイルを<script src=*>
インポートとして機能させ、ReactアプリがES6モジュールの読み込みを介してインポートできるようにしたいと思いました。
私は次の変換を思いつきました:
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'
Utilsはウィンドウスコープではないため、機能しません。問題なく読み込まれますがRandomHelper.DoThing()
、Utilsが定義されていないことがスローされます。
レガシーアプリ
<script src='Utils.js'></script>
<script src='RandomHelper.js'></script>
完璧に動作します。
RandomHelperがReactアプリでUtilsを使用できるようにして、IEとES5の互換性を維持しながら、リアクティブで動作させるにはどうすればよいですか。おそらく、どういうわけかウィンドウ/グローバル変数を設定していますか?
PS:ES6モジュールのロードのポイントは依存関係を処理することであり、既存のIIFEは理想的ではないことを理解しています。私は最終的にes6クラスとより良い依存関係制御を切り替える予定ですが、今のところ、書き直さなくても利用できるものを使用したいと思います