2017-08-11 7 views
0

common.jsを名前付き共通のファイルがある場合は、その他などa.jsb.jsとして...ES6はファイルを複数の場所にインポートします。なぜファイルが1回ロードされるのですか?

common.js

const Common = { property: 'initial' } 
export { Common }; 

a.js

import { Common } from 'common.js'; 
Common.property = 'changed'; 

b.js

import { Common } from 'common.js'; 
console.log(Common.property); 

まず、a.jsが実行され、common.jsが実行され、メモリにロードされます。

次に、エンジンによって実行されるb.js

  1. common.jsは、再度読み込まれるか、または既存のcommon.jsをメモリに使用しますか?
  2. common.jsが他のxx.jsスクリプトで更新された場合、importはどのように動作しますか?
+0

1.2 2 => 1. ...;) –

+0

@torazaburo私はこれが最初は重複していると思ったが、関連していない。リンクされた質問は、実行中のモジュール内のコードに関するものです。この質問は、変更されたモジュールから返されたオブジェクトに関するものです。 – styfle

答えて

0

私はあなたがNode.jsを使用していると仮定しているので、importは、transpiling後にrequireになります。ドキュメントから

モジュールは、彼らがロードされた最初の時間の後にキャッシュされます。これは、とりわけ、require('foo')へのすべての呼び出しで、同じファイルに解決される場合は、返されるオブジェクトがまったく同じになることを意味します。

  1. をモジュールがそのようにあなたが同じオブジェクト
  2. を変更しているキャッシュされていることが
    • を割り当てられた最後の値を表示します:明示的にあなたの質問に答えるために

Source

例えば、 a.jsが実行された場合

  • のみb.jsが実行された場合、それはオンラインhereそれを試してみてくださいinitial
  • を印刷します。

    +0

    ありがとう!私は理解していた。ちなみに、私はJavaScript(ES6)を使用し、ES5にコンパイルしました。 – junlin

    0

    ノード!= ES2015。

    特に、ES2015のインポートシステムは、ノードのrequire構文とは異なります。

    ES2015では、ランタイム中にモジュールの形状を変更することはできません。コードは静的であり、メモリー内に構築されています。どのような実用的な実装を行う可能性がありますすることは疑問視する次第ですについては

    が、TL; DRは、モジュールのロードまたは悪いことの間でファイルを変更するべきではないということです(TM)を発生する可能性があり

    関連する問題