WebpackでVue-cli 3を使用していますが、フォルダー構造は次のようになります。
/public
/src
/assets
p1.jpg
p2.jpg
App.vue
main.js
Webpackが/ assetsがどこにあるかを知るために、JavaScriptランドにいる場合はrequire()を使用する必要があることをいくつか読んだことがあります。
このコードが機能すると判断しました:
<template>
<div>
<ul>
<li v-for="photo in photos" :key="photo.id">
<img :src="photo.imageUrls.default" />
</li>
</ul>
</div>
</template>
<script>
/* For webpack to resolve URLs in javascript during the build, you need the require() function */
export default {
data() {
return {
photos: [
{
id: 1,
caption: 'P1',
series: '',
notes: '',
imageUrls: {
default: require('./assets/p1.jpg')
}
},
{
id: 2,
caption: 'P2',
series: '',
notes: '',
imageUrls: {
default: require('./assets/p2.jpg')
}
}
]
}
}
}
</script>
しかし、これは機能しません。コンソールにエラーが表示されます:「エラー:モジュール './assets/p1.jpg'が見つかりません」
<template>
<div>
<ul>
<li v-for="photo in photos" :key="photo.id">
<img :src="imagePath(photo)" />
</li>
</ul>
</div>
</template>
<script>
/* For webpack to resolve URLs in javascript during the build, you need the require() function */
export default {
data() {
return {
photos: [
{
id: 1,
caption: 'P1',
series: '',
notes: '',
imageUrls: {
default: './assets/p1.jpg'
}
},
{
id: 2,
caption: 'P2',
series: '',
notes: '',
imageUrls: {
default: './assets/p2.jpg'
}
}
]
}
},
methods: {
imagePath(photo) {
return require(photo.imageUrls.default);
}
}
}
</script>
2番目の例の何が問題なのかを説明できる人はいますか? require()呼び出しをデータに入れることは避けたいです。そのデータはサーバーから来る可能性があり、データにrequire()呼び出しを入れるのは奇妙に思えます。ありがとう。
編集:以下のEdgarのアドバイスによると、私の画像はアプリではなくサーバーの一部であるため、/ publicフォルダー内のフォルダーに配置するだけで、require()をまったく処理できません。
Vue.jsにはパブリックフォルダーがあります。 Vue CLIを使用している場合は、パブリックフォルダーが作成されているはずです。このフォルダーにアセットを配置する必要があります。詳細については、公式の Vue。 jsのドキュメント。
フォルダー構造の例:
/api
/public
/public/assets
/public/favicon.ico
/public/index.html
/src
index.js
app.json
等...
公共の場では、画像、フォント、ファビコン、robots.txt、sitemap.xmlなどの静的アセットを配置できます。
次に、使用するこれらの静的アセットにリンクするには:
テンプレートHTMLで:
<img src="/assets/some-image.svg" alt="Example" />
またはコンポーネントJSで:
array: [
{
iconUrl: '/assets/some-image-1.svg',
label: 'Some Label'
}
]
それ以外の場合は、他の誰かがすでに言っているように、require
フォルダーからプルされているため、src
を使用する必要があります。しかし、おそらくそれらをそこに置く本当の理由はないので、/public/
フォルダーをお勧めします。
リソースはクライアントにバンドルされているため、require
が必要です。
サーバー上のリソースが必要な場合は、public folder
代わりに。
よくあるもう1つの問題は、コンポーネントがコンポーネントフォルダーにある場合です。その場合は、以下をお試しください。
default: require('../assets/p1.jpg')
この質問は、あなたが検索できる一般的な問題だと思います。解決策は、リソースファイルを静的ディレクトリに配置することです。アセットフォルダー内のファイルはwebpackによって処理されるため、htmlモジュールに問題はありませんが、コードモジュールに問題があります。