You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React组件动态加载图标报错,Parcel打包环境下如何解决?

解决方案

方法一:在图标映射对象中直接存储require结果

修改weatherIcons对象,把每个路径字符串替换为require()调用的结果,让Parcel在构建时就能静态识别并打包对应的图片资源:

const weatherIcons = {
  // ... 其他图标映射
  "Heavy_Rain": require("../assets/images/icons8-heavy-rain-96.png"),
  // ... 其他图标映射
};

之后在组件里直接使用映射值即可:

<img className="img-fluid" src={weatherIcons.Heavy_Rain} />

方法二:用ES模块import导入图标

也可以提前用import语法导入所有需要的图标,再存入映射对象:

import heavyRainIcon from "../assets/images/icons8-heavy-rain-96.png";
// 导入其他需要的图标...

const weatherIcons = {
  // ... 其他图标映射
  "Heavy_Rain": heavyRainIcon,
  // ... 其他图标映射
};

组件中的使用方式和方法一完全一致。

问题原因

Parcel是静态打包工具,需要在构建阶段明确知晓所有要打包的资源路径。当你用require(weatherIcons.Heavy_Rain)时,weatherIcons.Heavy_Rain是动态变量,Parcel无法在构建时解析它对应的具体路径,因此抛出找不到模块的错误。而直接传入字符串路径、或提前用require/import处理路径,Parcel能静态识别资源并完成打包。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:45:32