-
-
Notifications
You must be signed in to change notification settings - Fork 8.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(core): hash router option - browse site offline (experimental) #9859
Conversation
✅ [V2]
To edit notification comments on pull requests, go to your Netlify site configuration. |
⚡️ Lighthouse report for the deploy preview of this PR
|
Size Change: +845 B (+0.05%) Total Size: 1.72 MB
ℹ️ View Unchanged
|
Do not compile a server bundle that we won't use
Looking forward that this will be release in the future! |
After a series of studies, I believe that hash routing is the ideal solution for my needs, but I found that it might have some incompatibility with i18n? Do you know anything about this? |
What did you found exactly? If you do not share what you found, you make it harder for us to help you. The Hash Router does not support well using a base URL. And building your site for multiple locales at once is going to add an automatic For example this doesn't work well for our own website: DOCUSAURUS_ROUTER=hash yarn build:website --locale en --locale fr
yarn serve:website But if you build one locale after another, then it works fine because the French locale gets hosted at DOCUSAURUS_ROUTER=hash yarn build:website --locale fr
yarn serve:website |
Thank you for your detailed response. Now let me describe the issue I'm encountering in detail. First, after adding the hash router and executing the build, everything seemed perfect. I obtained an offline document that could be compressed and distributed. However, when I tried to switch languages, I found that it couldn't navigate to the correct page. For example, my normal page path is: Initially, I thought there might be an issue with my i18n configuration, so I downloaded the official example document archive "website-hash-router-archive.zip". The standard path at this point is: I'm wondering if the hash router requires some additional configuration for i18n, or if there's an issue with my i18n settings causing this? To add, my requirements are very simple. My document is for local offline use only, supports multiple languages, and is searchable, that's all. |
You cannot "switch" language with the Hash Router because we do not have support for base URL. You have to remove the locale dropdown, build a different site per locale, and let users download the site in the language they care about. By the way, it is also more optional: if I'm French I don't want to download the Chinese site for example. |
Thank you very much for your detailed explanation! I will continue to package independently for now. But by the way, will it be possible to switch languages while using hash router in the future? |
Motivation
New site config option:
See also my comment here that presents the feature: #3825 (comment)
The hash router is useful in rare cases, and will:
/#/
prefixindex.html
fileIn practice, all the URLs will load a single
index.html
empty shell file, and will look like:https://docusaurus.io/#/
https://docusaurus.io/#/docs
https://docusaurus.io/#/docs/myDoc?age=42#someHeading
The motivation for this new router feature is to fix #3825, and allow distributing a Docusaurus site as a standalone
.zip
archive that can be browsed without a web server, using thefile://
protocol (exfile://path/to/site/index.html
)Note using the hash router will disable the following features that probably do not make much sense under this new mode:
EXPERIMENTAL FEATURE:
The hash router is likely to contain unhandled edge cases. Notably if you plan to use the
file://
protocol, or have a site/baseUrl/
.hash router + baseUrl = bugs 🐛
If you plan to use the hash router, we'd recommend using it without a
/baseUrl/
param. It probably does not make sense to use it anyway, because we try to make all links relative to make it work with thefile://
protocol, so hosting it on any subpath should work fine.There's also a bit of ambiguity because baseUrl
/docusaurus/
would mean that you access the app through a link such ashttps://myUrl.com/#/baseUrl/
, and nothttps://myUrl.com/baseUrl/#/
like most of you would probably expect. There's probably no good reason to host the app under a hash subpath.Unless someone comes up with a strong motivation for hash router + baseUrl, we are likely to forbid/ignore the usage of a baseUrl with hash router in the future. So please share your use case in the comments!
Test Plan
Unit tests + new CI workflow
That's so easy to dogfood, unfortunately. This has quite a large API surface. We probably need new Playwright tests to ensure this keeps working reliably over time, in particular the offline mode using
file://
protocol.To make it easier to manually review the hash router, we:
file://
Test links
Docs: https://deploy-preview-9859--docusaurus-2.netlify.app/docs/api/docusaurus-config/#future