Nuxt.jsのコンポーネントにassetsのファイルを渡す方法

シェアする:

今回は、Nuxt.jsのコンポーネントにassetsのファイルを渡す方法を考えます。

WordPressの上でな!

※ このブログはまだWordPress製です

通常のassetsの挙動

assetsはWebPackが管理する素材のようで、1KB以下だとインラインでロードするため読み込みが速いやつです(たぶん)。

ネットで調べると「大きいファイルをassetsにすべし!」とか「小さいファイルをassetsにすべし!」とかもう訳が分からないので、僕は「2ページ以上で使うファイル」をassetsに入れるようにしています。

通常、このassetsのファイルをロードする場合、この↓ように書きます。


<img src="~/assets/img/logo.jpg">

するとビルド時にパス周りが変更されて、出力したHTMLではこの↓ようになります。


<img src="/_nuxt/assets/img/logo.jpg">

コンポーネントにassetsを渡してみる

まず実験用に、この↓ようなコンポーネントを用意します。


<template>
<img :src="src">
</template>

<script>
export default {
  props: ['src']
}
</script>

先ほどと同様に<img>の「src」を指定するだけのコンポーネントです。 名前は「<test />」としましょう。

「test」コンポーネントに、先ほどと同様にsrcにassets以下のファイルを指定します。


<test src="~/assets/img/logo.jpg">

ビルドされたHTML↓。


<img src="~/assets/img/logo.jpg">

コンポーネントは正常に展開されましたが、srcがそのままになっています。 これでは正しく画像を読み込んでくれません。

コンポーネントに正しくassetsを渡す方法

Nuxt.js公式の説明を見ていると、

それは require('~/assets/image.png') に変換されます。

とあります。

じゃー先に自分で変換してやれと、


<test :src="require('~/assets/img/logo.jpg')" />

自分でrequireを指定します。

定数ではなくなるので「src」はv-bindにして「:src」としています。

出力結果↓。


<img src="/_nuxt/assets/img/logo.jpg">

うまくいきました。

まとめ

Nuxt.jsのコンポーネントにassets以下のファイルを渡す場合は、先に手動でrequireしてやればいいようです。


<test :src="require('~/assets/img/logo.jpg')" />

ちなみに、staticの方はこんなことしなくても普通に読み込めます。

以上、WordPressからお届けしました!

シェアする: