Vue CLIでの画像パスの指定方法・配置場所まとめ

Vue CLIを何となくで使っていると、つまづいてしまうのでが画像パスの指定です。
今回はどのフォルダに何を置いて、どのようにパスを指定すればいいのかまとめておきます。
画像の配置場所は2箇所ある
ややこしいのですが、Vue CLIにはsrc/assets/img内と、public/img内の2箇所の配置場所があります。
それぞれ参照方法も画像の扱いも違ってきます。
assets内
assetsのimg内に配置する場合は、最終的に表示されるときには、base64という形式にエンコードされて出力されます。
そのため、画像のキャッシュはされませんし、ただURLで参照しているわけではないので、CSSのbackground-imageなどでパスを書いて呼び出そうとしても、そのパスには画像がないので表示されません。
呼び出すときには、assetsの前に@/をつけるのが特徴です。
<img src="@/assets/img/sample.png">src属性やv-bindの:srcで使うときにはassets内に画像を置いて指定します。
public内
public内に配置した画像ファイルは、プロジェクトルートにそのまま移動されます。
特にエンコードもされないので、「/public」も省いて普通に画像パスを入力すれば表示されます。
<img src="/assets/img/sample.png">CSSのbackground-imageで利用したい画像は、publicに入れておかないと表示されないので注意が必要です。
2箇所の使い分け
この2箇所の使い分けは、webpackでコンパイルしたいかどうかの違いです。
- assets:webpackでコンパイルしたい
- public:webpackでコンパイルしたくない
CSSで利用したい場合は、コンパイルされてしまうとCSSで参照できなくなるのでpublicに置く必要があります。
普通にsrc属性にセットする画像であれば、どちらでもよさそうですが、webpackでコンパイルするとbase64形式になるので、base64形式のメリットが受けられます。
- 画像自体のHTTPリクエストが発生しない
- ファイルサイズの小さな画像をいっぱい読み込む場合は、base64で読み込んだ方がリクエストが減らせる
ただ、base64形式にするデメリットも存在します。
- base64だとデータサイズが約37%増加する
- キャッシュされない
ファイルサイズの小さな画像やロゴはassetsに入れて、大きな画像やCSSで参照する画像はpublicがよさそうです。

Mac向けのミニマルでお洒落なデザインのGitクライアント「Gitfox」
JavaScriptで日付をコピーして計算すると、コピー元の日付も変わってしまう場合の対処法
resizeイベントを使用する場合は、iOS Safariでの挙動に注意
GUIコンパイラのPreprosを使ってSassのコンパイルを行う
サイトのPocketに保存された回数や、あとで読まれた回数まで解析できるPocketのパブリッシャーツールの登録方法
「とりあえず無料版!」ではなく、機能を知った上で判断したいMAMPとMAMP PROの比較
CSS疑似要素の「:empty」でタグの中身が空のときのスタイルを設定する
HTTP/2が設定されているはずなのに、ブラウザ上でHTTP/1.1になってしまう場合はセキュリティソフトを確認
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Eagleで実現するクリエイティブ素材の簡単管理
かゆいところに手が届く「Supercharge」でMac環境を便利にカスタマイズする
超軽量なコードエディタ 「Zed」をサブエディタとして活用する
Bartender 6で追加されたWidgets機能で自作メニューバーアイテムを簡単に作成する
Googleカレンダーを便利に活用するための小技集(祝日だけを表示・月末の繰り返しイベントを追加)
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する
Path Finderを使ってキーボードだけでファイル操作する方法(応用編)
macOSのコマンドパレット比較!SpotlightとAlfred、Raycastどれを使えばいい?