Custom rule for markdownlint to validate relative links.
markdownlint-rule-relative-links is a markdownlint custom rule to validate relative links.
It ensures that relative links (using file:
protocol) are working and exists in the file system of the project that uses markdownlint.
File structure:
├── abc.txt
└── awesome.md
With awesome.md
content:
[abc](./abc.txt)
[Invalid link](./invalid.txt)
Running markdownlint-cli2 with markdownlint-rule-relative-links
will output:
awesome.md:3 relative-links Relative links should be valid ["./invalid.txt" should exist in the file system]
- Support images (e.g:
![Image](./image.png)
). - Support links fragments similar to the built-in
markdownlint
rule - MD051 (e.g:[Link](./awesome.md#heading)
). - Ignore external links and absolute paths as it only checks relative links (e.g:
https://example.com/
or/absolute/path.png
).
- Only images and links defined using markdown syntax are validated, html syntax is ignored (e.g:
<a href="./link.txt" />
or<img src="./image.png" />
).
Contributions are welcome to improve the rule, and to alleviate these limitations. See CONTRIBUTING.md for more information.
Node.js >= 16.0.0
npm install --save-dev markdownlint-rule-relative-links
There are various ways markdownlint can be configured using objects, config files etc. For more information on configuration refer to options.config.
We recommend configuring markdownlint-cli2 over markdownlint-cli for compatibility with the vscode-markdownlint extension.
.markdownlint-cli2.jsonc
{
"config": {
"default": true,
"relative-links": true
},
"globs": ["**/*.md"],
"ignores": ["**/node_modules"],
"customRules": ["markdownlint-rule-relative-links"]
}
package.json
{
"scripts": {
"lint:markdown": "markdownlint-cli2"
}
}
node --run lint:markdown
Anyone can help to improve the project, submit a Feature Request, a bug report or even correct a simple spelling mistake.
The steps to contribute can be found in the CONTRIBUTING.md file.