为什么 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 等工具中最终效果是一样的,只是写法不同

相关推荐
在繁华处2 小时前
Java从零到熟练(四):面向对象基础
java·开发语言
Unbelievabletobe2 小时前
解决了股票api接口盘后数据更新慢的问题
大数据·开发语言·python
不会C语言的男孩4 小时前
C++ Primer 第2章:变量和基本类型
开发语言·c++
wuxia21184 小时前
微信小程序单击元素切换元素的显示和隐藏
javascript·微信小程序·setdata
JustHappy4 小时前
古法编程秘籍(二):什么是代码模块化?别背概念,把房间收拾明白就够了
前端·后端
小江的记录本4 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处4 小时前
Java从零到熟练(三):流程控制
java·开发语言·python
weixin_471383034 小时前
图片预解码缓存
前端·浏览器缓存·图片预解码
一起学开源4 小时前
一文读懂 ReAct 范式:让 AI Agent 真正学会“思考+行动“
java·javascript·react.js·ecmascript·react·alibaba·智能体开发
云泽8085 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法