vite3动态管理图片

安装依赖

安装 store2 来替代传统 localstorage
包地址
https://www.npmjs.com/package/store2

npm i store2

简单使用

store.set(key, data[, overwrite]); // === store(key, data);
store.setAll(data[, overwrite]);   // === store({key: data, key2: data});
store.get(key[, alt]);             // === store(key);
store.getAll([fillObj]);           // === store();
store.transact(key, fn[, alt]);    // === store(key, fn[, alt]);
store.clear();                     // === store(false);
store.has(key);                    // returns true or false
store.remove(key[, alt]);          // removes key and its data, then returns the data or alt, if none
store.each(fn[, fill]);            // === store(fn); optional call arg will be 3rd fn arg (e.g. for gathering values)
store.add(key, data[, replacer]);  // concats, merges, or adds new value into existing one
store.keys([fillList]);            // returns array of keys
store.size();                      // number of keys, not length of data
store.clearAll();                  // clears *ALL* areas (but still namespace sensitive)

创建工具类目录

src
|- utils
  |-imgUtil.ts
import store from 'store2'

export class ImgUtil {
  // 存储所有图片 {'avatar.png': 'src/xxx/xxx/xx'}
  private static imgObj: Record<string, string> = {}

  // 加载 && 缓存图片
  static init() {
    ImgUtil.imgObj = store.get('imgList') || {}
    if (ImgUtil.isEmpty(ImgUtil.imgObj)) {
      ImgUtil.load()
      store.set('imgList', ImgUtil.imgObj)
    }
  }

  // 获取图片
  static getImage(imgName: string) {
    return ImgUtil.imgObj[imgName]
  }

  // 一次性加载所有图片到内存
  private static load() {
    // 加载所有图片到内存
    let imgMap = import.meta.glob('../assets/img/**/*.png', { eager: true, as: 'url' })
    let absolutePath: string = ''
    let imgName: string = ''
    for (let path in imgMap) {
      imgName = path.substring(path.lastIndexOf('/') + 1)
      absolutePath = imgMap[path]
      ImgUtil.imgObj[imgName] = absolutePath
    }
  }

  private static isEmpty<T extends Record<string, string>>(obj: T) {
    return !Object.getOwnPropertyNames(obj).length
  }
}

export default ImgUtil.getImage

main.ts

import { createApp } from 'vue'
import App from './App.vue'
import { ImgUtil } from './utils/imgUtil'

// 加载所有图片到内存 && 缓存
ImgUtil.init()

const app = createApp(App)
app.mount('#app')

组件内使用

<template>
	<div>
		<img :src="getImg('阳光大男孩.png')" alt="" />
	</div>
</template>

<script lang="ts" setup>
import getImg from './utils/imgUtil'
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3、Vite 和 TypeScript 的组合通常用于构建高性能的现代Web应用。对于静态图片处理,你可以采用以下步骤: 1. **安装依赖**: - 使用`npm`或`yarn`安装`vue.config.js`文件,以便配置Vite支持TypeScript:`npm install @vitejs/plugin-vue@next typescript` - 如果需要处理图片,安装一个图片处理库,如`sharp`(Node.js的高性能图像处理库),但在客户端运行Vite时,可能不会直接引入,因为Vite默认会打包到浏览器。 2. **配置Vite**: - 在`.viteignore`文件中忽略`node_modules`,防止打包过多不必要的体积。 - 更新`vite.config.ts`,添加TypeScript支持,配置Vite插件: ```typescript import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [vue()], build: { target: 'esnext', tsconfig: './tsconfig.build.json', // 根据项目需求配置正确的TS编译配置 }, }); ``` 3. **图片资源管理**: - 将图片放入`public`目录下,Vite会自动处理静态资产。 - 对于动态生成的图片(例如需要根据某些条件调整大小或添加水印),可以使用JavaScript (ES6+) 动态创建Image对象,或者在服务器端渲染时使用像`sharp`这样的库处理图片后再返回给前端。 4. **使用TypeScript**: - 引入图片处理模块时,确保正确导入并处理类型安全: ```typescript import sharp from 'sharp'; // 假设sharp是全局可用的,若不在Node环境则需引入库 async function resizeImage(src: string): Promise<Buffer> { const resized = await sharp(src) .resize(300, 200) // 设置新尺寸 .toBuffer(); // 转换为Buffer对象 return resized; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值