質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

258閲覧

JavaScript モジュールにおける default export は不要ではないでしょうか?

munekun

総合スコア61

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2024/07/25 09:28

質問事項

この世界に 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さんは importsource と名付けた。

JavaScript

1import source from '.path/to/file/source.js'; 2 3function testA() { 4 return source.hoge(); 5}

Bさんは importsrc と名付けた。

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 は不要ではないか?と思った次第です。

どこかに誤った考えがあるのでしょうけれど、初めてモジュール化に取り組んでいてよく理解できておりません。

わけのわからない勘違いをしているかもしれませんが、お手柔らかにお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2024/07/25 09:43

source という名前で export をする複数のライブラリを同時に使いたいときはどのようなコードになる想定ですか?
uasi

2024/07/27 05:26

その場合は import { source as sourceA } from … のようにリネームできます
guest

回答2

0

ベストアンサー

Bさんのように src という別名で import することはできませんよね?

できます。

javascript

1import { source as src } from '.path/to/file/source.js'; // こうすれば名前を変更できる

投稿2024/07/25 11:50

編集2024/07/25 11:51
maisumakun

総合スコア145628

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

munekun

2024/07/25 11:54

ありがとうございます。勉強にあんりました。
guest

0

散々議論されてることなのでこんな廃墟で議論する気はない。
答えはないので「チームで方針を決めればいい」以外にない。

投稿2024/07/25 09:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

munekun

2024/07/25 10:09

Oh..失礼いたしました。ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問