对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再次工作,您需要执行以下步骤:

  1. 在根目录(package.json旁边)中创建vue.config.js
  2. 输入以下代码
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>