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 文本处理
69KB
1.5K SLoC
hyperlink
用于在您的静态网站上查找断链的命令行工具。
-
快速。 docs.sentry.io 产生1.1GB的HTML文件。在MacBook Pro 2018上,
hyperlink
在4秒内处理这么多数据。参见替代方案以比较性能。 -
按需付费。 默认情况下,
hyperlink
仅在内部链接中检查硬404。超出此范围的内容需要启用。参见选项以启用功能列表。 -
将错误映射回源文件。 如果您的静态网站是由Markdown文件创建的,
hyperlink
可以尝试通过模糊匹配周围内容来找到原始的断链。参见--sources
选项。 -
仅支持遍历文件系统路径,不支持任意URL。
-
不遵守
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
功能等效的方案。
-
lychee与
hyperlink
一样,是大型静态网站的一个很好的选择。此外,它可以检查外部/出站链接。调用lychee --offline public/
与hyperlink public/
大致相当。 -
liche似乎相当快,但不再维护。
-
htmltest似乎也相当快,它是一个更通用的HTML linting工具。
-
muffet似乎与
htmltest
有相似的性能。我们使用http-server
和webfsd测试了muffet
,但并未注意到时间上的变化。 -
linkcheck比
linkchecker
快,但在大网站上仍然相当慢。我们在本地主机上尝试了
linkcheck
和http-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