コンポーネントimg srcの解決
BootstrapVueカスタムコンポーネントのプロジェクト相対画像URLの使用
vue-loaderはプロジェクト相対のsrc
属性を<img>
タグで自動的に変換しますが、画像src URLタグを受け入れるBootstrapVueカスタムコンポーネントでは自動的には行いません。
Vue Loader transformAssetUrls
によるimgパスの解決
プロジェクトでこれらのカスタムコンポーネントの画像URLを変換するには、Webpack設定でtransformAssetUrls
オプション
をカスタマイズする必要があります。
transformAssetUrls
のデフォルト値は
const options = {
transformAssetUrls: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href'
}
}
BootstrapVueコンポーネントでプロジェクト相対URLを使用できるようにするには、次の設定を使用します。
const options = {
transformAssetUrls: {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href',
'b-avatar': 'src',
'b-img': 'src',
'b-img-lazy': ['src', 'blank-src'],
'b-card': 'img-src',
'b-card-img': 'src',
'b-card-img-lazy': ['src', 'blank-src'],
'b-carousel-slide': 'img-src',
'b-embed': 'src'
}
}
これにより、.vue
ファイルで次の形式を使用できます。
<b-img src="~/static/picture.jpg"></b-img>
<b-card-img src="~/static/picture.jpg"></b-card-img>
Vue CLI 3のサポート
Vue CLI 3ではVueアプリのWebpackコンパイル方法が変更されました。BootstrapVueを再び動作させるには、次の手順を実行する必要があります。
- ルートディレクトリ(
package.json
の隣)にvue.config.js
を作成します。 - 次のコードを記述します。
module.exports = {
chainWebpack: config => {
config.module
.rule('vue')
.use('vue-loader')
.loader('vue-loader')
.tap(options => {
options.transformAssetUrls = {
img: 'src',
image: 'xlink:href',
'b-avatar': 'src',
'b-img': 'src',
'b-img-lazy': ['src', 'blank-src'],
'b-card': 'img-src',
'b-card-img': 'src',
'b-card-img-lazy': ['src', 'blank-src'],
'b-carousel-slide': 'img-src',
'b-embed': 'src'
}
return options
})
}
}
Nuxt.jsでのtransformAssetUrls
の設定
nuxt.config.js
ファイルのbuildセクションに以下を追加します。
module.exports = {
build: {
extend(config) {
const vueLoader = config.module.rules.find(rule => rule.loader === 'vue-loader')
vueLoader.options.transformAssetUrls = {
video: ['src', 'poster'],
source: 'src',
img: 'src',
image: 'xlink:href',
'b-avatar': 'src',
'b-img': 'src',
'b-img-lazy': ['src', 'blank-src'],
'b-card': 'img-src',
'b-card-img': 'src',
'b-card-img-lazy': ['src', 'blank-src'],
'b-carousel-slide': 'img-src',
'b-embed': 'src'
}
}
}
}
Nuxt.jsでBootstrapVue Nuxtモジュールを使用している場合、プラグインモジュールによってBootstrapVue固有のtransformAssetUrls
設定が自動的に追加されます。
require
による画像パスの解決
ビューローダーの設定でtransformAssetUrls
を設定できない場合は、代わりにrequire
メソッドを使用できます。
<b-img :src="require('../static/picture.jpg')"></b-img>
<b-card-img :src="require('../static/picture.jpg')"></b-card-img>