【问题标题】:Vite Vue-3 - project @ not working for srcsetVite Vue-3 - 项目@不适用于 srcset
【发布时间】:2021-07-30 22:48:15
【问题描述】:

我按照this 解决方案使别名@ 工作:

我的 vite.config.js:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: [
      { find: '@', replacement: path.resolve(__dirname, 'src') }
    ],
  },
})

这行得通:

<img src="@/assets/logo.png">

这不起作用:

<img src="@/assets/logo.png" srcset="@/assets/logo@2x.png 2x">

这是我在浏览器中的输出:

<img
  src="/src/assets/logo.png"
  srcset="/src/views/@/assets/logo@2x.png 2x"
>

【问题讨论】:

    标签: javascript vue.js vuejs3 vite


    【解决方案1】:

    看起来@vue/compiler-sfc 有一个错误,在v3.0.0-beta.9 adding support for absolute URLs in srcset 时引入。这个错误绕过了transformation that would've resolved the asset URLs in srcset。 (在 GitHub 问题 vuejs/vue-next#4819 中报告)

    我发现的一种解决方法是手动创建 srcset 并明确解析资产 URL:

    <template>
      <img :srcset="srcset" />
    </template>
    
    <script setup>
    import logo2x from '@/assets/logo@2x.png'
    import logo3x from '@/assets/logo@3x.png'
    
    const srcset = `${logo2x} 2x, ${logo3x} 3x`
    </script>
    

    或者使用动态导入,如果您需要动态更新srcset,这可能会有所帮助:

    <template>
      <img :srcset="srcset" />
    </template>
    
    <script setup>
    import { ref } from 'vue'
    
    const srcset = ref(null)
    Promise.all([
      import('@/assets/logo@2x.png'),
      import('@/assets/logo@3x.png')
    ]).then(([{ default: logo2x }, { default: logo3x }]) => {
      srcset.value = `${logo2x} 2x, ${logo3x} 3x`
    })
    </script>
    

    【讨论】:

    【解决方案2】:

    除非您不是很明确地将图像保存在 ./src/assets/images 文件夹中,否则有一个简单的解决方法,即将您的图像移动到 ./public/assets/image 文件夹并引用它:

    <img src="/assets/images/img-01.png"
         srcset="/assets/images/img-01@2x.png 2x">
    

    【讨论】:

      【解决方案3】:

      您是否尝试过使用 srcset 的 v 绑定。

      <img 
        src="@/assets/logo.png" 
        :srcset="require('@/assets/logo@2x.png') + ' 2x'"/>
      

      【讨论】:

      • 感谢您的帮助,但这并没有帮助。我收到此错误:Uncaught (in promise) ReferenceError: require is not defined 和更多我正在寻找不使用 require() 的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2022-08-04
      • 2021-06-07
      • 2020-12-26
      • 2022-07-27
      • 2021-11-27
      • 2019-08-02
      • 2020-12-22
      • 2022-08-14
      相关资源
      最近更新 更多