Vue javascript内の画像のような静的アセットを参照する正しいURLを探しています。
たとえば、カスタムアイコン画像を使用してリーフレットマーカーを作成し、いくつかのURLを試しましたが、それらはすべて404 (Not Found)
を返します。
Main.vue:
var icon = L.icon({
iconUrl: './assets/img.png',
iconSize: [25, 25],
iconAnchor: [12, 12]
});
幸運にもアセットフォルダーと静的フォルダーに画像を入れてみました。 vueにそれらの画像を何らかの方法で読み込むように指示する必要がありますか?
テンプレートから画像を参照する場合は、「@」を使用して画像を直接参照できます
例:
<img src="@/assets/images/home.png"/>
Vueの通常のセットアップでは、/assets
は提供されません。
代わりに、画像はsrc="data:image/png;base64,iVBORw0K...YII="
文字列になります。
require()
JSコードから画像を取得するには、require('../assets.myImage.png')
を使用します。パスは相対パスでなければなりません(以下を参照)。
したがって、コードは次のようになります。
var icon = L.icon({
iconUrl: require('./assets/img.png'), // was iconUrl: './assets/img.png',
// ...
});
たとえば、次のフォルダー構造があるとします。
- src
+- assets
- myImage.png
+- components
- MyComponent.vue
MyComponent.vue
で画像を参照する場合、パスは../assets/myImage.png
になります
a DEMO CODESANDBOX 動作中を示しています。
Webpackが正しいアセットパスを返すには、require( './ relative/path/to/file.jpg')を使用する必要があります。これはファイルローダーによって処理され、解決されたURLを返します。
computed: {
iconUrl () {
return require('./assets/img.png')
// The path could be '../assets/img.png', etc., which depends on where your vue file is
}
}
VueJSテンプレート-静的アセットの処理 を参照してください
スクリプトタグを無効にした直後にimport someImage from '../assets/someImage.png'
を追加して、アイコンURL iconUrl: someImage
に使用します
どのシステムを使用していますか? Webpack? Vue-loader?
ここでブレーンストーミングするだけです...
.pngはJavaScriptファイルではないため、ファイルローダーまたはurlローダーを使用してそれらを処理するようにWebpackを構成する必要があります。 vue-cliでスキャフォールディングされたプロジェクトもこれを設定しました。
webpack.conf.js
を見て、次のように適切に構成されているかどうかを確認できます。
...
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
...
/assets
は、バンドル中にwebpackによって処理されるファイル用です-そのため、JavaScriptコードのどこかで参照する必要があります。
他のアセットは/static
に入れることができ、このフォルダーのコンテンツは/dist
にそのままコピーされます。
変更することをお勧めします:
iconUrl: './assets/img.png'
に
iconUrl: './dist/img.png'
公式ドキュメントはこちらでご覧いただけます: https://vue-loader.vuejs.org/en/configurations/asset-url.html
それがあなたに役立つことを願っています!