在Eleventy中维护外部链接



我在我的eleventy站点中使用markdown引用链接。

与其在每个页面上重复定义链接,我宁愿把它们放在一个地方,然后在我的页面中引用它们。

例如,links.md可能包含:

[github]: <https://github.com/>
[stackoverflow]: <https://stackoverflow.com/>

然后任何页面都可以引用这些链接。

有人知道这是否可能吗?

如果您想在一个位置定义链接并在模板中全局访问它们,您可以在包含链接定义的_data/*目录中创建一个全局数据文件,然后在Markdown文件中引用它们。以下是全局数据文件_data/links.json:的示例

{
"socials": {
"github": "<https://github.com/>",
"stackoverflow": "<https://stackoverflow.com/>",
"twitter": "<https://twitter.com/>",
...
}
}

通过这种方式,您可以使用类似{{ foo }}的插值来访问_data/links.json中的数据,该数据包含整个11ty项目中的全局链接定义。如果要在模板中使用该全局数据,请引用全局数据文件links的名称,然后根据需要访问对象密钥,例如{{ links.socials.key }}

不幸的是,使用[GitHub]({{ links.socials.github }})是不起作用的,但为了避免在每个页面上添加链接定义,您可以随时执行以下操作:

---
title: Some title
templateEngineOverride: njk, md
---
<a href="{{ links.socials.github }}">GitHub</a>

或者,如果使用Nunjucks作为模板引擎,则可以使用set为社交链接创建变量,并避免定义Markdown引用链接。

---
title: Some title
---
{% set github = links.socials.github %}
[Link to my GitHub]({{ github }})

最后,使用一个短代码和全局数据相结合也不是一个坏主意。

module.exports = function(eleventyConfig) {
eleventyConfig.addShortCode("socialLink", function(linkName, url) {
return `<a href="${url}">${linkName}</a>`;
});
}
// Template Usage (.md or .njk etc)
{% socialLink "GitHub", links.socials.github %}
// outputs: <a href="<https://github.com>">GitHub</a>

最新更新