为什么 js 对象中引用本地图片需要写 require 或 import

1、模块化系统的要求:

现代前端工程(如 Vue、React)使用 webpack / vite 等构建工具,这些工具要求所有静态资源必须显式声明依赖;

require / import 是告诉 webpack / vite 这个文件是我的项目依赖,请处理它,如果直接写成普通路径(如:img: '@/assets/apply/p.jpg')会被当成字符串,webpack / vite 不会处理这个文件;

2、构建工具的工作流程:

1.找到图片文件;

2.压缩/优化图片;

3.将图片复制到输出目录(如 dist 文件夹);

4.返回最终的文件路径;

3、路径转换问题:

开发时可能写的相对路径,但构建后的文件结构会变化,require 会动态解析路径,确保无论构建后的文件如何分布,最终路径都是正确的;

require 和import区别:

可以把 require 和import 想象成两种不同的的"快递服务",都能帮你把本地图片送到网页显示,但服务方式不同:

|----------|---------------------------|------------------------------|
| 特点 | require (CommonJS) | import (ES odule) |
| 调用时机 | 任何地方随时调用 | 必须在文件顶部先声明 |
| 支持环境 | Node.js原生支持 | 现代浏览器原生支持 |
| 写法 | const img = require('路径') | import img from '路径' |
| 静态分析 | 较难优化(不如 import 友好) | 更容易优化和 tree-shaking(删除未使用代码) |
| 动态加载 | 支持动态路径 | 需要特殊写法 import() |

建议:

1、新项目尽量用 import 更现代,性能更好;

2、旧项目或 Node.js 环境可以用 require;

3、注意:纯浏览器环境不能直接使用 require,需要 webpack 等工具;

两种方式在 webpack / vite 等工具中最终效果是一样的,只是写法不同

相关推荐
铅笔侠_小龙虾13 小时前
Vue 学习目录
前端·vue.js·学习
悟能不能悟13 小时前
vue的history和hash模式有什么不一样
前端·vue.js
晓庆的故事簿13 小时前
前端的浏览器地址传参
前端
你不是我我13 小时前
【Java 开发日记】我们来说一说 Redis IO 多路复用模型
java·开发语言·redis
想七想八不如1140813 小时前
408操作系统 PV专题
开发语言·算法
浩瀚地学13 小时前
【Java】ArrayList
java·开发语言·经验分享·笔记
阿杰同学14 小时前
Java 设计模式 面试题及答案整理,最新面试题
java·开发语言·设计模式
这样の我14 小时前
java 模拟chrome指纹 处理tls extension顺序
java·开发语言·chrome
yong999014 小时前
基于MATLAB的雷达压制干扰仿真
开发语言·matlab