docusaurus icon indicating copy to clipboard operation
docusaurus copied to clipboard

Relative markdown links between blog and docs does not work

Open quinn-p-mchugh opened this issue 2 years ago • 4 comments

Have you read the Contributing Guidelines on issues?

Prerequisites

  • [X] I'm using the latest version of Docusaurus.
  • [X] I have tried the npm run clear or yarn clear command.
  • [X] I have tried rm -rf node_modules yarn.lock package-lock.json and re-installing packages.
  • [X] I have tried creating a repro with https://new.docusaurus.io.
  • [X] I have read the console error message carefully (if applicable).

Description

Hi Docusaurus team,

Love this library - thank you for your awesome work!

I'm looking to link a blog post to a docs page using a relative markdown link, but I receive the following error when I specify [link to doc](../../docs/doc-page.md) in the blog post:

[WARNING] Blog markdown link couldn't be resolved: (../../docs/doc-page.md) in "/home/projects/github-dc5ygn/blog/blog-post.md

On the other hand, using link without the .md ([link to doc](../../docs/doc-page)) extension works fine.

Is there a way I can prevent the broken link while preserving the .md extension? I'm using an Obsidian plugin to convert wikilinks to internal links and need to keep the .md extension for it to work properly.

Reproducible demo

https://stackblitz.com/edit/facebook-docusaurus-mx3fkh?file=blog%2Fblog-post.md

Steps to reproduce

  1. Go to demo linked above.
  2. Wait for the site to compile. You should see a warning: [WARNING] Docs markdown link couldn't be resolved: (../../docs/doc-page.md) in "/home/projects/facebook-docusaurus-mx3fkh/docs/doc-page.md" for version current
  3. In the website preview on the right, click the menu button (three bars).
  4. Click Blog.
  5. Under the "blog-post" title click "link to doc".
  6. You should see a "Page Not Found" error.
  7. Edit "blog-post.md" to exclude ".md" from the link: [link to doc](../../docs/doc-page)
  8. Complete steps 2-5. Link should now work correctly.

Expected behavior

The link [link to doc](../../docs/doc-page) should work regardless of whether or not .md is specified.

Actual behavior

The link [link to doc](../../docs/doc-page) only works when .md is omitted.

Your environment

  • Public source code: See demo link above
  • Public site URL: See demo link above
  • Docusaurus version used: 2.4.1
  • Environment name and version (e.g. Chrome 89, Node.js 16.4): Node.js 16.20.0
  • Operating system and version (e.g. Ubuntu 20.04.2 LTS): N/A

Self-service

  • [ ] I'd be willing to fix this bug myself.

quinn-p-mchugh avatar Jul 01 '23 19:07 quinn-p-mchugh

Yes, it does not work, because currently the relative link resolution is a plugin-specific feature and not a Docusaurus core feature.

I'd like to support cross-plugin relative links but it would require the core engine to somehow maintain a "file path -> URL path" mapping, and we probably need additional plugin lifecycle hooks for that.

Note: if you use Docs versioning, once your docs get versioned, the docs copy will be at a different location and it might break your relative links that are not linking to the same current version (I mean: a relative link from v1.3 to v1.3 won't break, but a v1.3 relative link to a blog post might break when the doc is moved from ./docs to ./versioned_docs/1.3).

slorber avatar Jul 03 '23 07:07 slorber

Hi @slorber,

Thanks for confirming! I now see this is noted in the documentation here.

Good to know regarding doc versioning. Fortunately, I do not have a need for versioned docs at this time.

Seems like I might be able to workaround this by using regular expressions to remove the .md in the GitHub Obsidian Publisher settings, but we'll see.

Very much appreciate your help.

quinn-p-mchugh avatar Jul 03 '23 21:07 quinn-p-mchugh

سوف يتم تصحيح الأخطاء في أسرع وقت

ADNANALISALHADABY avatar Aug 28 '23 19:08 ADNANALISALHADABY

related https://github.com/facebook/docusaurus/issues/3250

AMD-NICK avatar Jan 29 '25 18:01 AMD-NICK