🧘

MIMEタイプのnpmパッケージ選びでもう迷わない

2022/07/22に公開

この記事について

この記事ではNode.jsでファイル名や拡張子からMIMEタイプを取得する必要がある時にmimemime-typesのどちらを使えばよいかいつも迷うので選定基準などについて紹介します。

結論

  • expressを使っている場合はexpress.static.mime.lookupメソッドまたはres.typeメソッドを使う。
  • */vnd.*や*/x-*が不要であればmime/liteを使う。
  • それ以外の場合はmimeを使う。

express.static.mimeについて

expressserve-staticを使い、serve-staticはsendを使い、sendはmimeを使うという依存関係があります。sendが使っているmimeのバージョンは2022年7月22日時点で1.6.0と現行の3.0.0と比べて古いです。MIMEタイプを取得するのに3.0.0のmime.getTypeメソッドを使いますが、1.6.0ではmime.lookupメソッドを使うなどの違いがあります。mimeのバージョンが古くても不都合がない場合はexpress.static.mime.lookupメソッドを使うことで追加のnpmパッケージをインストールしなくてもよくなります。

なお、MIMEタイプを取得してContent-Typeヘッダに設定する場合はexpress.tatic.mime.lookupメソッドの代わりにres.typeメソッドを使います。

mimeとmime-typesの比較

mimemime-typesはいずれもファイル名とMIMEタイプを相互変換するnpmパッケージですが、下記のような違いがあります。

  • メソッド名が異なる。例えばmime-typesのmime.lookup('json')に対し、mimeではmime.getType('txt')と書く。
  • mimeの方がサイズが小さい。mime-typesのminified+compressedサイズが18KBであるのに対し、mimeは8KB。

詳細についてはmimeのGitHubページのMime .vs. mime-types .vs. mime-db modulesセクションで説明されています。

mime/liteについて

mime/litemimeの軽量版です。*/vnd.*や*/x-*が無い代わりにminified+compressedサイズが2KBであり、フルバージョンの8KBより軽量です。

おわりに

同じようなライブラリがあるとどちらを使えば良いか迷いますよね。この記事をお読みの方の中で似たような経験がある方はお気軽にコメントをいただければ幸いです。最後までお読みいただきありがとうございました!

GitHubで編集を提案

Discussion