質問事項
この世界に default export は不要ではないでしょうか?
もちろんそんなことはなくて何か利便性があるのでしょうけれど、しかし下記の #問題意識 に対する #解決案 に鑑みれば、default export の活躍の場はないのでは?と思いました。
ご意見いただければ幸いです。
問題意識
default export の場合、import
側でAさんとBさんが異なる名前を付ける可能性がありますよね?
例えば以下のように source.js で default export したとして、
JavaScript
1// source.js 2function hoge(){} 3function fuga(){} 4 5export default { 6 hoge, 7 fuga 8}
Aさんは import
で source
と名付けた。
JavaScript
1import source from '.path/to/file/source.js'; 2 3function testA() { 4 return source.hoge(); 5}
Bさんは import
で src
と名付けた。
JavaScript
1import src from '.path/to/file/source.js'; 2 3function testB() { 4 return src.hoge(); 5}
というケースがありえますから、わかりにくくなってしまう可能性があると思います。
この「別名で import
してしまうわかりにくさ」に問題意識を感じました。
解決案
そこで default export は使わず、1つの値にラップした上で named export すればいいのではないでしょうか?
こうです。
JavaScript
1// source.js 2export const source = (() => { 3 function hoge(){} 4 function fuga(){} 5 6 return { 7 hoge, 8 fuga 9 } 10})();
このようにすれば、Bさんのように src
という別名で import
することはできませんよね?
JavaScript
1import { source } from '.path/to/file/source.js'; // -> できる 2import { src } from '.path/to/file/source.js'; // -> できない
結論
というわけで、この世界のすべての default export は、1つの値にラップした上で named export にするという修正を加えれば、「別名で import
してしまうわかりにくさ」というデメリットが解消できて、引き換えのデメリットは生じないのでは?ならば default export は不要ではないか?と思った次第です。
どこかに誤った考えがあるのでしょうけれど、初めてモジュール化に取り組んでいてよく理解できておりません。
わけのわからない勘違いをしているかもしれませんが、お手柔らかにお願い致します。
回答2件
あなたの回答
tips
プレビュー