MIMEタイプのnpmパッケージ選びでもう迷わない
この記事について
この記事ではNode.jsでファイル名や拡張子からMIMEタイプを取得する必要がある時にmimeとmime-typesのどちらを使えばよいかいつも迷うので選定基準などについて紹介します。
結論
- expressを使っている場合は
express.static.mime.lookup
メソッドまたはres.type
メソッドを使う。 - */vnd.*や*/x-*が不要であればmime/liteを使う。
- それ以外の場合はmimeを使う。
express.static.mimeについて
expressはserve-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の比較
mimeとmime-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/liteはmimeの軽量版です。*/vnd.*や*/x-*が無い代わりにminified+compressedサイズが2KBであり、フルバージョンの8KBより軽量です。
おわりに
同じようなライブラリがあるとどちらを使えば良いか迷いますよね。この記事をお読みの方の中で似たような経験がある方はお気軽にコメントをいただければ幸いです。最後までお読みいただきありがとうございました!
Discussion