import

import (JavaScript)

仕様書

Web ブラウザーの処理

[2] Webブラウザーは、 referencing指定子に関する HostResolveImportedModule を、次のようにしなければなりません >>1

  1. [3] 参照元スクリプトを、 referencingHostDefined に設定します。
  2. [5] URL を、参照元スクリプト指定子についてモジュール指定子を解決した結果に設定します。
  3. [4] 参照元スクリプト設定群オブジェクトモジュール写像 [ URL ] のモジュール記録を返します。

[13] つまり、与えられたモジュール指定子を解決して得られた URL が、既に読み込み済みのモジュールスクリプトURL であれば、 そのモジュールスクリプトが使われます。

[10] 静的import で使われます。

[8] Webブラウザーは、 referencing指定子promiseCapability に関する HostImportModuleDynamically を、次のようにしなければなりません>>1

  1. [9] スクリプトを、 referencingHostDefined に設定します。
  2. [33] 未定義を返します。

[34] 並列に、次のようにしなければなりません >>1

  1. [12] URL を、スクリプト指定子についてモジュール指定子を解決した結果に設定します。
  2. [15] URL失敗の場合、
    1. [16] 完了を、新しい Completion に設定します。
      Type
      throw
      Value
      新しい TypeError
      Target
    2. [20] referencing指定子promiseCapability, 完了について FinishDynamicImport を実行します。
  3. [22] それ以外の場合、
    1. [23] オプション群を、 スクリプトfetchオプション群子孫スクリプトfetchオプション群に設定します。
    2. [21] モジュールスクリプトグラフのfetch を実行します。
      URL
      URL
      設定群オブジェクト
      referencing設定群オブジェクト
      終点
      script
      オプション群
      オプション群
      続きの処理
      >>11

[11] 続きは、結果について、次のようにします。 >>1

  1. [24] 結果null の場合、
    1. [25] 完了を、新しい Completion に設定します。
      Type
      throw
      Value
      TypeError
      Target
    2. [26] referencing指定子promiseCapability完了について、 FinishDynamicImport を実行します。
  2. [27] それ以外の場合、
    1. [28] モジュールスクリプトの実行をします。
      スクリプト
      結果
      エラーを再び投げる
      例外を、投げられた例外に設定します。
    2. [29] 例外がある場合、
      1. [30] referencing指定子promiseCapability例外について FinishDynamicImport を実行します。
    3. [31] それ以外の場合、
      1. [32] referencing指定子promiseCapabilityNormalCompletion (未定義) について FinishDynamicImport を実行します。

歴史

[14] Handle error cases during module script tree fetching/running better (domenic著, ) <https://github.com/whatwg/html/commit/e1af86747f591e33fd0f3f21f301dc866868c9d4>

[17] Fix bad assert in HostResolveImportedModule (domenic著, ) <https://github.com/whatwg/html/commit/e7041402890076aaf7095a3f8931ba0a00393b72>

[18] Fix error cases of <script type=module> (domenic著, ) <https://github.com/whatwg/html/commit/115763124a641e8814665c5014d28155f95ff441>

[19] Don't handle impossible errors in HostResolveImportedModule (domenic著, ) <https://github.com/whatwg/html/commit/616df18cd9e6c17878db5167909c69ca9f9d2906>

[7] Improve module instantiation/evaluation, especially around errors (domenic著, ) <https://github.com/whatwg/html/commit/2b408b65a11fe76b6588b744e0ae74d30ff29b43>

[6] Integrate dynamic import() (domenic著, ) <https://github.com/whatwg/html/commit/d4d1704f9c0efbeed78b885d566af17545b8b5fe>

[35] Spec import() HTML integration · Issue #2315 · whatwg/html () <https://github.com/whatwg/html/issues/2315>

[36] Add integrity="" for module scripts, and integrate dynamic import() by domenic · Pull Request #3044 · whatwg/html () <https://github.com/whatwg/html/pull/3044>

[37] Specify which settings object is used for dynamic import (nhiroki著, ) <https://github.com/whatwg/html/commit/07ab5082c326a0548b5d7665ac1524f1fa9e2818>

[38] Specify which settings object is used for dynamic import by nhiroki · Pull Request #3700 · whatwg/html () <https://github.com/whatwg/html/pull/3700>

[39] Peeling out import() · Issue #149 · whatwg/loader () <https://github.com/whatwg/loader/issues/149>

[40] tc39/proposal-dynamic-import: import() proposal for JavaScript () <https://github.com/tc39/proposal-dynamic-import>

This repository contains a proposal for adding a "function-like" import() module loading syntactic form to JavaScript. It is currently in stage 3 of the TC39 process. Previously it was discussed with the module-loading community in whatwg/loader#149.

[41] import() () <https://tc39.github.io/proposal-dynamic-import/>

[42] proposal-dynamic-import/HTML Integration.md at master · tc39/proposal-dynamic-import () <https://github.com/tc39/proposal-dynamic-import/blob/master/HTML%20Integration.md>

[43] Discussion: Towards a module map proposal · Issue #2547 · whatwg/html () <https://github.com/whatwg/html/issues/2547>

[44] Editorial: refactor classic and module scripts to be more alike (domenic著, ) <https://github.com/whatwg/html/commit/dce999aac4d9deeefa3b338dd2aeb30c17669bc8>

[45] Editorial: move base URL from "module script" to "script" (domenic著, ) <https://github.com/whatwg/html/commit/5458513792ab00d58e6c91ba48faaa611d034a2e>

[46] Add integrity="" for module scripts, and integrate dynamic import() by domenic · Pull Request #3044 · whatwg/html () <https://github.com/whatwg/html/pull/3044>

[47] Make integrity="" work on module scripts (domenic著, ) <https://github.com/whatwg/html/commit/9275d955dcd604e959cfcc672e0c234b1b8c00db>

[48] Integrate dynamic import() (domenic著, ) <https://github.com/whatwg/html/commit/d4d1704f9c0efbeed78b885d566af17545b8b5fe>

[49] Adds "audioworklet" and "paintworklet" as destinations. by bfgeek · Pull Request #527 · whatwg/fetch () <https://github.com/whatwg/fetch/pull/527>

[50] Dynamic import()  |  Web  |  Google Developers () <https://developers.google.com/web/updates/2017/11/dynamic-import>

[51] Peeling out import() · Issue #149 · whatwg/loader () <https://github.com/whatwg/loader/issues/149>

[52] New in Chrome 63  |  Web  |  Google Developers () <https://developers.google.com/web/updates/2017/12/nic63?utm_source=feed&utm_medium=feed&utm_campaign>

[53] Fix import() inside setTimeout()/setInterval() strings (domenic著, ) <https://github.com/whatwg/html/commit/12cdfefad607fc824e6ea64a4b967fc24043f684>

[54] setTimeout() base URL/script fetch options behavior seems wrong · Issue #3116 · whatwg/html () <https://github.com/whatwg/html/issues/3116>

[55] Fix import() inside setTimeout()/setInterval() strings by domenic · Pull Request #3117 · whatwg/html () <https://github.com/whatwg/html/pull/3117>

[56] DOM handler and import · Issue #32 · tc39/proposal-dynamic-import () <https://github.com/tc39/proposal-dynamic-import/issues/32>

[57] 今まで JavaScript APIURL は原則的に文書基底URL を使っていたので、その原則が崩れてしまうのは微妙。 でも外部スクリプトファイルの import が自身の URL じゃなくて使っている文書基底URLを使うようになると、 この上なく使いにくくなりそうだ。じゃあ import() もそれと一貫してほしいってことになるのは自然。

[58] eval "import()" setTimeout ("import()", ...) は含まれているスクリプトファイルの基底URLを引き継ぐ。 element.onclick = function () { import () } もそう。一方 element.setAttribute ("onclick", "import()") は文書の基底URLになる、のかな。 でもWebブラウザー発火させるより前に element.onclick にアクセスしたら、その時点でコンパイルされるけど、 どうなるのか。

[59] Editorial: change "resolve a module specifier" to take a URL (domfarolino著, ) <https://github.com/whatwg/html/commit/8176d055eaef62cad03327a7cc47c5c7926ffb0c>

[60] Resolve a module specifier now takes a base URL by domfarolino · Pull Request #3807 · whatwg/html () <https://github.com/whatwg/html/pull/3807>