Posted at

Nested import declarations - TC39 Proposals

この記事は2019年10月9日に書いたものであり、#tc39_study TC39 Proposals LT 大会で使用したもの。

この機能はまだ未策定かつ変更の可能性が高い。



状況



提案内容

importをtop level以外でも使用できるようにするというもの。


関数内にネスト可能で、スコープは関数内に限定し、同期的宣言。


if (condition) import "./sometimes";

if (condition) {
import "./sometimes";
}

if (condition) let foo = bar;



Dynamic importとの違い

非同期関数内のみで動作する。

async function main() {

const hoge = await import('./hoge.js');
hoge()
}


このDynamic importはすでに現在EdgeやIE以外の主要ブラウザで使用できる。


スクリーンショット 2019-10-09 11.34.50.png



Dynamic importとの関係

Dynamic importのproposal「A new binding form」の部分を読むと記載があるが、2016年7月のTC39 meetingでNested import declarationsの話し合いがあり、そこで当時Stage1にいたDynamic importの前身?であるawait importの提案を待つように言われている。

同期的なimportの提案なので、ブラウザやtop levelのimportとの関係性に問題があるという話などが行われていた。


先ほど記載したようにawait importの提案を待つように言われており、本人は同期宣言を望んでいたが、どうやら叶わなかったらしい。


まだInactive Proposalsに入らず、Stage0に居るので、もしかしたら動くこともあるかもしれない。



最後に

このNested import declarationsを読む前はDynamic importがあり、Stage0から上がらなさそうなのに、なんで読もうとしているのだろうという気持ちだったが。


Dynamic importとの関係性や2016年の話し合いを知れて、おもしろかった。