2017-09-15 18 views
0

私は最近ES6モジュールを読んでテストしており、2alityとMDNを私の理解の源泉として使用しています。JavaScriptモジュール(ES6)のサイクリック依存関係

近代化を計画している大規模なレガシーJSウェブアプリケーションでは、循環依存性があり、問題の解決方法はありませんでした。 循環依存関係はできるだけ避けるべきであり、移行後の私の次のステップはできるだけ多くの問題を解決することを知っています。次のように

私のテストケースは次のとおりです。

test.htmlという:

<script type="module"> 
    import B from './B.js'; 

    console.log(B.moo()); 
</script> 

B.js:

// B.js 
import A from './A.js'; 

export default class B { 
    static moo() { 
     return A.boo(); 
    } 
} 

A.js:

// A.js 
import B from './B.js'; 

export default class A extends B { 
    static boo() { 
     return "Boo"; 
    } 
} 

から上記、私は本質的にハ起こってわずか2物事まし:私はそれを得る Uncaught ReferenceError: B is not defined at A.js:3

  1. B.moo()は、しかしエラーで上記のコードの結果をB

を拡張A.boo()

  • A静的メソッドを呼び出しますES6モジュールは静的に解決され、エラーは理にかなっています。しかし、彼らはまた(と思われますか?)循環依存をサポートしています。

    多くの問題を抱えた後、私は解決策を見つけました。しかし、もっと良い方法があるのだろうか?ここで

    は、これまでのところ、私の実用的なソリューションです:

    test.htmlという:

    <script type="module"> 
        import A from './A.js'; 
        import B from './B.js'; 
    
        console.log(B.moo()); 
    </script> 
    

    B.js:

    import A from './A.js'; 
    
    export const B = class B { 
        static moo() { 
         return A.boo(); 
        } 
    } 
    
    export {B as default}; 
    

    A.js:

    import B from './B.js'; 
    
    export const A = class A extends B { 
        static boo() { 
         return "Boo"; 
        } 
    } 
    
    export {A as default}; 
    
  • +1

    「import A」を「./A.js';*」からb.jsの最後の行に移動できませんでしたか? –

    +0

    @Jonaswそれは確かに私が思い付くよりもきれいです - しかし、私はそれが働いて驚いています、私は読み込んだと思ったが、インポートされたモジュールの順序は問題ではなかった。私はまだtest.htmlにAとBの両方をインポートする必要があります。これは避けたいものです。 – Jarym

    +0

    "もっと良い方法があるのだろうか?" - 確かに、あなたのデザインを修正してください。基本クラスは決してその子孫を呼び出すべきではありません。あなたの特定の問題について教えてください。 – georg

    答えて

    0

    後いくつかのより多くの検索私はこのartiに遭遇したcle:https://medium.com/@rohanjamin/using-scope-to-resolve-circular-dependency-dynamic-loading-issues-in-es6-2ef0244540fa - 私は以前のGoogleの検索でそれを見つけられなかった理由はわかりません。

    これは、私が作業しているコードと同じコード配列にかなり似ていますが、うまく機能しているようです。私は木の揺れにいくつかの将来の問題があることを予期することができますが、Babelには数カ月間に手作業でリファクタリングできる循環依存関係のリストを出力しています。

    関連する問題