[Vite] Vite Alias & static assets

 

In vite.config.ts

    resolve: {
      alias: {
        "@": path.resolve(__dirname, "src"),
        "@assets": path.resolve(__dirname, "src/assets"),
      },
    },

 

tsconfig.json

  "compilerOptions": {
    "baseUrl": "./",
    // order matter
    "paths": {
      "@assets/*": ["src/assets/*"],
      "@/*": ["src/*"],
    },
    ...
  }

 

App.vue

// import NotFound from './views/404.vue';
import NotFound from '@/views/404.vue';

 

https://cn.vitejs.dev/guide/assets.html#importing-asset-as-url

https://cn.vitejs.dev/config/build-options#build-assetsdir

<template>
  <div class="season">
    <button class="btn-primary" @click="handleChange" value="spring">春</button>
    <button class="btn-primary" @click="handleChange" value="summer">夏</button>
    <button class="btn-primary" @click="handleChange" value="autumn">秋</button>
    <button class="btn-primary" @click="handleChange" value="winter">冬</button>
  </div>

  <div class="card">
    <!-- <img src="@/assets/summer.jpg" alt=""> -->
    <!-- <img :src="spring" alt=""> -->

    <!-- 使用import动态导入的方式 -->
    <!-- <img :src="imgPath" alt=""> -->

    <!-- 使用new URL的方式处理 -->
    <img :src="url" alt="">
  </div>
</template>

<script setup lang="ts">
import { ref,computed } from 'vue'
// import spring from "@/assets/spring.jpg";

// Error: 直接引入变量的方式是没有效果的,vite并不会帮我们去解析路径
// const spring = ref('/src/assets/spring.jpg');

// import spring from '@/assets/spring.jpg';
// const imgPath = ref(spring);
// const handleChange = (e:Event) => { 
//   const v = (e.target as HTMLButtonElement).value;
//   import(`@/assets/${v}.jpg`).then((res) => { 
//     console.log(res);
//     imgPath.value = res.default;
//   })
// }

// 使用new URL的方式处理变量的静态资源路径
const imgPath = ref('spring');
    
// 计算属性处理URL地址
const url = computed(() => { 
  const href = new URL(`../assets/${imgPath.value}.jpg`, import.meta.url).href;
  console.log("🚀 ~ href:", href)
  return href;
})
    
// 事件切换路径字符串
const handleChange = (e:Event) => { 
  const v = (e.target as HTMLButtonElement).value;
  imgPath.value = v;
}
</script>

 

<template>
  <div v-html="rocketSvgRaw" class="svg-container"></div>
</template>

<script setup lang="ts">
import rocketSvgRaw from '@/assets/rocket.svg?raw';
</script>

<style lang="scss">
.svg-container svg{
  width: 100px;
  height: 100px;
  fill: #f00;
  &:hover{
    fill: #0f0;
  }
}
</style>

 

posted @ 2025-02-14 03:03  Zhentiw  阅读(29)  评论(0)    收藏  举报