# Vue CLIでの画像パスの指定方法・配置場所まとめ
URL: https://webrandum.net/vue-cli-image-path/
公開日: 2020-09-04
更新日: 2020-09-04
カテゴリー: コーディング
タグ: Vue CLI, Vue.js
出典: Webrandum(著者: サイトウ マサカズ)
Vue CLIを何となくで使っていると、つまづいてしまうのでが画像パスの指定です。
今回はどのフォルダに何を置いて、どのようにパスを指定すればいいのかまとめておきます。
## 画像の配置場所は2箇所ある
ややこしいのですが、Vue CLIには`src/assets/img`内と、`public/img`内の2箇所の配置場所があります。
それぞれ参照方法も画像の扱いも違ってきます。
### assets内
`assets`の`img`内に配置する場合は、最終的に表示されるときには、base64という形式にエンコードされて出力されます。
そのため、画像のキャッシュはされませんし、ただURLで参照しているわけではないので、CSSの`background-image`などでパスを書いて呼び出そうとしても、そのパスには画像がないので表示されません。
呼び出すときには、`assets`の前に`@/`をつけるのが特徴です。
```
```
src属性やv-bindの:srcで使うときにはassets内に画像を置いて指定します。
### public内
`public`内に配置した画像ファイルは、プロジェクトルートにそのまま移動されます。
特にエンコードもされないので、「/public」も省いて普通に画像パスを入力すれば表示されます。
```
```
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`がよさそうです。