当前位置: 首页 > news >正文

前端 JS 经典:统一 Vite 中图片转换逻辑

在 Vue + Vite 项目中有这样一段代码如下,引入了两个图片,一大一小。然后 console 出来引入结果。

import bigImg from "./assets/big.png";
import smallImg from "./assets/small.png";console.log(bigImg);
console.log(smallImg);

在开发环境中 npm run dev,打印结果如下:

/src/assets/big.png
/src/assets/small.png

在生产环境再看,先打包 npm run build,然后本地预览 npm run preview。打印结果如下:

/assets/big-xxxxxx.png
data:image/png;base64,xxxxxx....

这就有区别了,第一个图片是路径,第二小图变成 base64。这个变化有啥问题呢,没啥问题,这是 Vite 做的优化,当它觉得一个图片尺寸很小的时候,没有必要进行网络请求了,直接整一个 dataurl 出来。

现在有个需求,是需要在开发环境下和生产环境下,使它们的路径格式要一致

有两种方式:第一种以开发环境为主,将 vite 的这种打包优化禁止掉。将 vite.config.js 中的 assetsInlineLimit 设置为 0 就可以了。

export default defineConfig({plugins: [vue()],build: {assetsInlineLimit: 0,},
});

但是这样是不合理的,因为优化没了。换一种方法,以生产环境为主,通过自定义插件解决。这样在开发环境下,图片如果小于临界值,就会转化为 base64。

import fs from "ndoe:fs";const MyPlugin = (limit = 4096) => {return {name: "my-plugin",async transform(code, id) {if (process.env.NODE_ENV !== "devlopment") {return;}if (!id.endsWith(".png")) {return;}const stat = await fs.promises.stat(id);if (stat > limit) {return;}const buffer = await fs.promises.readFile(id);const base64 = buffer.toString("base64");const dataUrl = `data:image/png;base64,${base64}`;return {code: `export default "${dataUrl}"`,};},};
};export default defineConfig({plugins: [vue(), MyPlugin()],build: {assetsInlineLimit: 4096,},
});

http://www.lryc.cn/news/370929.html

相关文章:

  • DOM-获取元素
  • 【安装笔记-20240612-Linux-内网穿透服务之cpolar极点云】
  • Java 泛型与集合的深入解析:原理、应用与实践
  • Oracle 数据库的自动化工具:AWR 和 ASM
  • java技术专家面试指南50问【java学习+面试宝典】(五)
  • Elasticsearch之深入聚合查询
  • 大模型:分本分割模型
  • 数据预处理 #数据挖掘 #python
  • VS2022 使用C++访问 mariadb 数据库
  • kotlin 语法糖
  • .NET MAUI Sqlite数据库操作(一)
  • SQL 窗口函数
  • staruml怎么合并多个Project工程文件
  • 设计模式——外观模式
  • 开源-Docker部署Cook菜谱工具
  • 使用PHP对接企业微信审批接口的问题与解决办法(二)
  • RK3288 android7.1 实现ota升级时清除用户数据
  • okHttp的https请求忽略ssl证书认证
  • 在Java中使用Spring Boot设置全局的BusinessException
  • Java 异常处理 -- Java 语言的异常、异常链与断言
  • Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
  • java多线程临界区介绍
  • 基于JSP的超市管理系统
  • 一文讲清:生产报工系统的功能、报价以及如何选择
  • blender bpy将顶点颜色转换为UV纹理vertex color to texture
  • Flink Sql:四种Join方式详解(基于flink1.15官方文档)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第3节(泛型约束)
  • C语言详解(预编译)
  • 解决el-table表格拖拽后,只改变了数据,表头没变的问题
  • 简单塔防小游戏