对BootstrapVue自定义组件使用项目相关的图像URL
vue loader会自动转换<img>
标记上的项目相关src
属性,但不会自动转换接受图像src url标记的BootstrapVue自定义组件。
用于解析img路径的Vue加载程序transformAssetUrls
要让您的项目为您转换这些自定义组件图像URL,您将需要在Webpack配置中为vue-loader
自定义
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-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更改了webpack编译Vue应用程序的方式,为了使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-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-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'
}
}
}
}
如果将 BootstrapVue Nuxt 模块与Nuxt.js一起使用,
插件模块将自动为您添加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>