teramotodaiki / h4p

The hackable and serializable IDE to make learning material
https://teramotodaiki.github.io/hackforplay-on-feeles/
MIT License
4 stars 2 forks source link

es2015 import/export #12

Open teramotodaiki opened 8 years ago

teramotodaiki commented 8 years ago

CommonJS will be... ??

Which is better require or import?

teramotodaiki commented 8 years ago

require.jsを使わず、es2015 modulesをエミュレートしてみては?

手法は同じでよくて、あらかじめ [name]: { ...data } を登録しておき、raw:string から /import (.*);/m でマッチングして依存関係をあらかじめ明らかにしておく。 このときNamed importかDefault importかで扱いが変わる。es2015 modulesではcyclic dependenciesをサポートすべきとし、後から値を埋めることも出来るとしているため、Default importの場合、依存先スクリプトの実行を 必ずしも待たなくてよい (要検証…値がプリミティブの場合は解決すべきだ)。一方、Named importの場合、構造がStaticに解決していなければならないため、依存先のスクリプトは必ず解決させる必要がある。 スクリプト実行のとき、export構文を一時的に独自構文に変換し、exportされた値を保持できるようにする。import構文は一時的に生成したオブジェクトの参照に切り替える。このオブジェクトはmutableで、依存先のスクリプト等の影響で後から値が変わることがある。つまり、1つのスクリプトごとに1つの親オブジェクトがある。

依存の最上位から順番にevalする。依存の中にあるすべてのスクリプトを実行するまで続ける。同じスクリプトを2度実行することは決してない(要検証)。

疑問:依存解決の順番によって結果が変わることはないか?

WebPackのやり方が一番近い気がする(ただしバンドルすることはない)

teramotodaiki commented 8 years ago

https://github.com/rollup/rollup

teramotodaiki commented 7 years ago

Circular dependency の解決には rollup のような手段が必要

rollup instead of require.js

ただし、そのばあい require は使えなくなる

https://github.com/rollup/rollupjs.org