名前列挙したエクスポート文は、ファイルの先頭でも最後でもいいが、ファイルの先頭を推奨。最後だと、そこにあるのを見過ごす可能性があるし、長いファイルをスクロールする手間もイヤだ。メタ的情報は先頭に書け。
import * as say from './say.js';
↑だとインポートされて使うモノの名前が不明。エクスポートと同じ構文でエクスポートも書くと対応関係が取りやすいし、メタ的情報としても読みやすい。
上の方式だと、say. で修飾しないとアクセスできない。sayからのモノという目印にはなるが、一般には面倒なだけ。
インポート側での名前の個別リネームの as も使わない。混乱の原因になる。エクスポート側ではリネームしてかまわない。
export default された名前は import 好きな名前 fro モジュール
でロードできるが、構文的に混乱(ブレイスの有る無しの勘違い)の原因になるし、やめたほうがいい。
export default が実は "default" という名前を使っていることも非常に紛らわしい。プロパティ名には使えるが、キーワードでもあるし、とか、鬱陶しい! default という名前にリネームするとかのバッドノウハウもあるし。以下の2つは同じ。
import User from './user.js'; new User('John');
import * as user from './user.js'; let User = user.default; new User('John');
詳細は:
デフォルトエクスポートという機能は「なかったもの」として扱うといいだろう。