LoginSignup
11
10

More than 1 year has passed since last update.

[JavaScript] import, exportについて

Last updated at Posted at 2021-07-28

私は普段phpを書いており、最近はVue.js, Nuxt.jsも触っているのですが、
動かすことのできるコードは書けています。
Vue, Nuxt を触る前まではES5しか書いたことがなく、
ほぼ毎日レベルで見ている import, export を正直理解できていなかったので、
記事にしてまとめました。


import, export is 何

変数・関数・クラスを文字通りexportすることができ、そのexportされたものをimportすることで、外部モジュールに記載された処理等々を使うことができる機能。

phpでいえば importは require で、exportはpublic修飾子にあたるようなもの。

export はクラスで言う、public修飾子?

public修飾子というわけではないが、exportをしなければ、そのファイル内に機能が閉じる。
そのためexportをすれば外部から参照する手段となるので、そういう意味では "public" という認識で間違いない。

export の名前付き、デフォルトについて

  • 名前付き
    変数・関数・クラスに付けられた名前でexportする。

  • デフォルト
    変数・関数・クラスに名前を付けても付けなくてもいい。1つのファイルに1回しか使えない。

import の名前付き、デフォルトについて

exportの方法が2種類あるのでimportの方法も2種類ある。

  • 名前付き
import {needCurlyBrace} from './Foo.js';
  • デフォルト

名前付きのように波括弧は不要だが、import時に命名する必要がある

import Bar from './Foo.js';

import, export の構文について

色々あるので、下記MDNを参照してください。

import
export

export で被った名前をimportしたらどうなるの?

名前が被っている場合は、importできない。import時に as を加えて別名にする必要あり。

importしたファイル内に同じ名前があった場合は?

こちらも同様、importできない。import時に as を加えて別名にする必要あり。

名前付きのほうが良く無い?import側で毎回命名って辛く無い?

そう思う。し、世間もそのようである。

export defaultを使わないようにしている記事もいくつかあるから、そうなんだと思う。

TypeScript Deep Dive でさえもそのような記事がある。
また、Tree-Shaking的な観点でもやっぱりアンチパターンのようです。

ちなみにJetbrains WebStormではdefaultで使われているものもコードジャンプできた。けどね。

もしできなかったらどこになにあるか分からなくて地獄だね。

export default 使うタイミングってどこよ?

調べたけど特に見つからなかった。
ご存知の方いらっしゃいましたら教えてください!


まとめ

基本 named export を使おう。

命名はいつも通り気をつけよう。
使っていない(無駄な)import は避けよう。

編集後記

以前ざっと import, export を調べた時は、
基本的に export default 推奨、って結構書かれてた気がするんだけど、全くの真逆だった。
調べると件数は少ないながらも、そのような記述している昔の記事がでてくるので、
トレンド的にそのような時もあったのかな。。

11
10
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10