发布于 2026-01-06 1 阅读
0

在项目中添加图标的最简单方法:使用 Unpkg DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

在项目中添加图标的最简单方法:使用 Unpkg

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

互联网在过去几年里取得了长足的进步,但仍然存在一些不直观易懂的地方。使用图标就是其中之一。

图标字体、内联 SVG、SVG 符号——它们各自都有各自的问题。例如,内联 SVG 虽然很好用,但会使代码变得混乱,而且无法缓存。此外,复制粘贴 SVG 本身也相当耗时且麻烦。

使用图标应该更简单。我一直想要的是:看到想要使用的图标,就能立即使用。无需复制粘贴;只需知道图标名称即可。无需费力配置 Webpack/Grunt 流程。无需为每个图标创建新的 SVG 文件/组件。

幸运的是,我找到了办法。请继续往下看!

svg-loader:从 CDN 加载 SVG

svg-loader是一个简单的库,允许你将托管在外部源上的 SVG 嵌入到代码中。我写了一篇更详细的文章介绍它,但简单来说,它的用法如下:



<script type="text/javascript" src="https://unpkg.com/external-svg-loader@1.0.0/svg-loader.min.js" async></script>

<svg data-src="https://s2.svgbox.net/assets/logo-white.svg" 
    width="50"
    height="50" 
    fill="purple"></svg>


Enter fullscreen mode Exit fullscreen mode

该库会使用 XHR 获取 SVG 并将其内联插入。这样做的好处是什么?现在您可以自定义填充、继承颜色,并使用诸如悬停之类的状态,而这些在之前的 `<div>`<img>和 ` <div>`<object>标签中是无法实现的。

这个概念并不新鲜,svg-inject 的功能类似。不过,svg-loader 让这一切变得极其便捷。你只需要在代码中引入脚本即可,其余一切都由它自动处理。而且它还与框架无关(支持 React、Vue、Angular 等)。

svg-loader + unpkg = 绝佳组合

最近,我发现可以使用库和unpkg快速包含 Github 上提供的图标。

以MDI 图标库为例。据我所知,它是 GitHub 上最大的图标库,拥有超过 5000 个图标。

由于该仓库有一个 NPM 包,我们可以在 unpkg 上浏览它:https://unpkg.com/@mdi/svg/

图像

如果您点击任何文件并使用“查看原始文件”,您会看到任何图标的永久链接类似于这样:https://unpkg.com/@mdi/svg@5.9.55/svg/__ICON__.svg

我们可以用它来开始在项目中使用该图标。例如:

太棒了!现在,如果您需要使用该cog图标,无需再费力寻找 SVG 代码或下载它,只需使用即可cog.svg

注意:首次加载可能会有轻微延迟,因为 Unpkg 需要获取软件包并提取文件,但首次请求之后,文件将被缓存并从 Cloudflare CDN 提供服务。

关于此方法的问答

关于这种方法可能会有很多疑问,所以我将尝试回答其中最常见的问题。

如果代码库发生更改(例如,重命名文件)怎么办?这会不会影响我的图标显示?

不。使用 unpkg,您很可能会使用版本化的 URL(而不是@latest),这将确保无论存储库发生什么变化,内容都保持不变。

为每个图标都触发 XHR 请求,而不是将它们打包在一起,岂不是效率低下吗?

不。使用 HTTP/2,开销非常低。对于异步加载的非阻塞资源,开销几乎可以忽略不计。以下是我使用相同方法加载 50 个图标的示例。

此外,图标在首次加载时也会被缓存,因此后续加载速度非常快。

如果 unpkg 功能消失了怎么办?

不会的。这是一个由 Cloudflare官方支持的项目,每天处理超过 30 亿次请求。

如果我想使用一套没有 npm 包的图标集怎么办?

您可以使用jsDeliver,它具有类似的 API,并且支持原始 Github 仓库。


我觉得这种图标处理方法非常巧妙。你可以使用Font AwesomeOcticons或 GitHub 上任何其他优秀的图标集。

它速度快、非常可靠,而且能保持代码简洁。

文章来源:https://dev.to/shubhamjain/simplest-way-to-include-icons-in-your-project-using-unpkg-53op