32个版本

0.1.32 2023年11月29日
0.1.31 2023年7月26日
0.1.29 2023年6月11日
0.1.27 2023年1月20日
0.1.23 2022年6月25日

#126 in 文本处理

MIT 许可证

69KB
1.5K SLoC

hyperlink

用于在您的静态网站上查找断链的命令行工具。

  • 快速。 docs.sentry.io 产生1.1GB的HTML文件。在MacBook Pro 2018上,hyperlink在4秒内处理这么多数据。参见替代方案以比较性能。

  • 按需付费。 默认情况下,hyperlink仅在内部链接中检查硬404。超出此范围的内容需要启用。参见选项以启用功能列表。

  • 将错误映射回源文件。 如果您的静态网站是由Markdown文件创建的,hyperlink可以尝试通过模糊匹配周围内容来找到原始的断链。参见--sources选项

  • 仅支持遍历文件系统路径,不支持任意URL。

    • 不支持<base>标签。

    • 不支持外部链接。 它不知道如何使用HTTP。

    • 即使您没有静态网站,您也可以先使用例如suckit下载整个网站,然后使用hyperlink。在某些情况下,这比其他工具也更快。

  • 不遵守robots.txt。即使Google没有索引,断链仍然对用户来说是断链。

  • 不解析CSS文件,因为CSS中的断链对我们来说不是一个实际的关注点。我们关注的是页面内容中的断链,而不是其周围的边缘。

  • 仅支持UTF-8编码的HTML文件。

安装和用法

下载最新二进制文件

# Check a folder of HTML
./hyperlink public/

# Also validate anchors
./hyperlink public/ --check-anchors

# src/ is a folder of Markdown. Show original Markdown file paths in errors
./hyperlink public/ --sources src/

GitHub操作

- uses: untitaker/[email protected]
  with:
    args: public/ --sources src/

NPM

npm install -g @untitaker/hyperlink
hyperlink public/ --sources src/

Docker

docker run -v $PWD:/check ghcr.io/untitaker/hyperlink:0.1.32 /check/public/ --sources /check/src/

# specific commit
docker run -v $PWD:/check ghcr.io/untitaker/hyperlink:sha-82ca78c /check/public/ --sources /check/src

查看所有可用标签

从源码

cargo install --locked hyperlink  # latest stable release
cargo install --locked --git https://github.com/untitaker/hyperlink  # latest git SHA

选项

在没有选项的情况下调用hyperlink时,它仅检查内部链接的404错误。然而,它还能做更多。

  • -j/--jobs:用于解析HTML时启动的线程数量。默认情况下,hyperlink将尝试饱和您的CPU。

  • --check-anchors:选择启用,检查页面上的锚点的有效性。损坏的锚点被视为警告,这意味着如果只有损坏的锚点但没有硬404错误,hyperlink将退出代码2

  • --sources:一个文件夹,包含用于检查HTML的markdown文件。这是为了提供指向实际文件的更好的错误消息。 hyperlink进行非常简单的基于内容匹配,以确定哪些markdown文件可能参与了HTML文件的创建。

    为什么不是在这个时候爬取和验证Markdown中的链接?答案

    • 现在有无数专有的Markdown扩展,用于创建页内链接,这些链接通常不被链接检查工具支持。

    • 您的Markdown内容结构不一定与HTML结构(即用户实际看到的内容)相匹配。在这种设置下,hyperlink无需假设您的构建流程。

  • --github-actions:输出GitHub actions错误,即在PR差异中添加错误消息。此选项仅在与--sources设置一起使用时才有用。

    如果您通过GitHub action使用hyperlink,此选项已设置。它仅在您在CI中自行下载/构建和运行hyperlink时才有用。

退出代码

  • exit 1:发生了错误(硬404错误)
  • exit 2:只有警告(损坏的锚点)

替代方案

(按性能大致排序,由一些不认真的基准测试确定。本节包含部分过时的测量结果,并未在性能或功能集方面持续更新)

所列出的替代方案中没有一种具有与hyperlink--sources--github-actions功能等效的方案。

  • lycheehyperlink一样,是大型静态网站的一个很好的选择。此外,它可以检查外部/出站链接。调用lychee --offline public/hyperlink public/大致相当。

  • liche似乎相当快,但不再维护。

  • htmltest似乎也相当快,它是一个更通用的HTML linting工具。

  • muffet似乎与htmltest有相似的性能。我们使用http-server和webfsd测试了muffet,但并未注意到时间上的变化。

  • linkchecklinkchecker快,但在大网站上仍然相当慢。

    我们在本地主机上尝试了linkcheckhttp-server,尽管这并不是瓶颈。

  • wummel/linkchecker 看起来功能丰富,但由于性能问题未能启动。这同样适用于我们在此未提及的其他无数链接检查器。

用户评价

我们使用 Hyperlink 来检查 Graphviz 的静态网站用户文档 中的死链接,因为

  • Hyperlink 非常快,默认情况下在 220ms(700 个 HTML 页面)和 850ms(使用 --check-anchors)内完成检查。
  • Hyperlink 的单个二进制发布,没有库依赖,轻松集成到我们的 持续集成测试 中。
  • 高覆盖率:Hyperlink 立即发现了超过一千个损坏的页面链接,包括 <a> 标签和 HTML 重定向,以及使用 --check-anchors 进一步发现的 62 个损坏的锚点链接。
  • Hyperlink 设计决策仅爬取静态文件(避免 HTTP),避免了网络请求带来的测试不确定性,使我能够自信地阻止 Hyperlink 报告错误时的合并。

总之,Hyperlink 在“静态网站持续测试”这个领域表现得非常出色。

-- Mark Hansen,Graphviz 文档维护者

许可证

MIT 许可,见 ./LICENSE

依赖项

~8MB
~163K SLoC