904 字
5 分钟
[Fuwari]链接卡片功能示例

关于链接卡片#

链接卡片类似于 Starlight 中的 <LinkCard> 组件,以卡片形式展示链接。

使用方法#

在 Markdown 段落中仅包含单个”裸链接”(无描述文本的链接)即可自动转换为链接卡片。

**外部链接**
https://astro.build/
<https://github.com/saicaca/fuwari/>
[https://fuwari.vercel.app/](https://fuwari.vercel.app/)
**内部链接**
[/posts/guide/](/posts/guide/)
更多细节请参阅 internalLink 配置项说明。
**国际化域名 (IDN)**
https://はじめよう.みんな/
NOTE

卡片显示后,可尝试切换主题颜色或开启暗黑模式!

配置选项#

astro.config.mjs 文件中进行配置:

...
import fuwariLinkCard from "./src/plugins/fuwari-link-card.js"
...
export default defineConfig({
...
integrations: [
...
fuwariLinkCard(), // 插件在此处
...

若插件顺序复杂,可指定为 remark 插件:

...
import remarkLinkCard from "./src/plugins/remark-link-card.js"
...
export default defineConfig({
...
markdown: {
...
remarkPlugins: [
...
remarkLinkCard, // 插件在此处
...
名称类型默认值说明
devModebooleanimport.meta.env.DEV启用/禁用开发模式
linkAttributesObject{ target: ”, rel: ” }设置外部链接的 target 和 rel 属性。留空可交由其他插件处理
rewriteRulesArray<Object>[]重写从链接获取的元数据(如标题和描述)
basestring’/‘指定与 Astro 相同的 base 路径。详见文档作为集成插件使用时,若未指定将自动获取
defaultThumbnailstring元数据无图片时的默认缩略图路径(相对于 public 目录)。例如:‘images/default-thumbnail.jpg’ 对应 public/images/default-thumbnail.jpg
internalLinkObject{ enabled: false, site: ” }启用站内链接处理
cacheObject详见下方详细选项构建时下载并缓存图片

linkAttributes#

名称类型默认值说明
targetstring指定链接打开方式(如 _blank)。留空则不设置
relstring定义当前文档与链接文档的关系。留空则不设置

rewriteRules#

名称类型默认值说明
urlRegExp用于匹配特定 URL 的正则表达式
rewriteStepsArray<Object>定义元数据属性的重写规则

以下示例演示如何重写 GitHub 仓库链接的标题和描述:

rewriteRules: [
{
url: /^https:\/\/github\.com\/[^\/]+\/[^\/]+\/?$/,
rewriteSteps: [
{ key: "title", pattern: /:.*/, replacement: "" },
{
key: "description",
pattern: /(?: (?:\. )?Contribute to (?:.+\/.+) .+\.?)|(?: - (?:.+\/.+))$/,
replacement: "",
},
{
key: "description",
pattern: /^Contribute to (?:.+\/.+) .+\.?$/,
replacement: "未提供描述。",
},
],
},
],
名称类型默认值说明
keystring需重写的元数据属性名
patternRegExp匹配元数据值的正则表达式
replacementstring替换匹配内容的字符串

设置 enabledtrue 启用站内链接处理。sitebase 选项将内部链接解析为绝对 URL。链接必须指向服务器存在的文件

名称类型默认值说明
enabledbooleanfalse启用/禁用站内链接处理
sitestring指定与 Astro 相同的部署 URL。详见文档作为集成插件使用时,若未指定将自动获取

cache#

以下选项用于控制缓存行为:

名称类型默认值说明
enabledbooleanfalse启用/禁用缓存
outDirstring’./dist/‘输出目录路径。详见文档。与 Astro 对齐可享受图片优化等功能
cacheDirstring’./link-card/‘缓存目录路径。开发模式下最终图片路径为 base + outDir + cacheDir,否则为 base + cacheDir
maxFileSizenumber0单文件最大缓存大小(字节),0 表示无限制
maxCacheSizenumber0总缓存大小限制(字节),0 表示无限制
userAgentstring’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36’HTTP 请求头中的客户端标识

快速配置#

本插件使用 @fastify/deepmerge 简化配置合并:
https://www.npmjs.com/package/@fastify/deepmerge

样式 HTML 结构#

样式定义在 src/styles/link-card.css,自动生成的 HTML 结构如下(供自定义样式参考):

<div class="link-card__container">
<a href="https://astro.build/" class="link-card">
<div class="link-card__info">
<div class="link-card__title">Astro</div>
<div class="link-card__description">Astro 可构建快速内容站点、强大的 Web 应用、动态服务 API 等。</div>
<div class="link-card__metadata">
<div class="link-card__domain">
<img alt="favicon" class="link-card__favicon" src="https://www.google.com/s2/favicons?domain=astro.build">
<span class="link-card__domain-name">astro.build</span>
</div>
</div>
</div>
<div class="link-card__thumbnail">
<img alt="Astro - 构建你想要的 Web" class="link-card__image" src="https://astro.build/og/astro.jpg">
</div>
</a>
</div>
[Fuwari]链接卡片功能示例
https://elvish.me/posts/link-cards/
作者
Elvish
发布于
2025-02-23
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时