组件 img src 解析
为 BootstrapVue 自定义组件使用项目相对图像 URL
vue-loader 会自动转换 src
属性上的项目相对 <img>
标记,但不会自动转换接受图像 src url 标记的 BootstrapVue 自定义组件。
Vue Loader transformAssetUrls
用于解析 img 路径
要让你的项目转换这些自定义组件图像 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-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 改变了 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-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
文件中,将以下内容添加到你的构建部分
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
解析图像路径
如果你无法在 view-loader 配置中设置 transformAssetUrls
,你可以使用 require
方法
<b-img :src="require('../static/picture.jpg')"></b-img>
<b-card-img :src="require('../static/picture.jpg')"></b-card-img>