📦 plugin-client-redirects
Docusaurus 插件生成客户端重定向。
这个插件将编写额外的 HTML 页面到您的静态站点,将用户重定向到您现有的 Docusaurus 页面与 JavaScript。
只生产
这个插件在开发中总是不活跃的,只有在生产中才活跃,因为它在构建输出中工作。
警告
最好尽可能使用服务器端重定向。
在使用这个插件之前,你应该看看你的主机提供商是否提供这个功能。
安装
- npm
- Yarn
- pnpm
npm install --save @docusaurus/plugin-client-redirects
yarn add @docusaurus/plugin-client-redirects
pnpm add @docusaurus/plugin-client-redirects
配置
接受字段:
选项 | 类型 | 默认的 | 描述 |
---|---|---|---|
fromExtensions | string[] | [] | 重定向后要从路由中删除的扩展名。 |
toExtensions | string[] | [] | 重定向后要附加到路由的扩展名。 |
redirects | RedirectRule[] | [] | 重定向规则列表。 |
createRedirects | CreateRedirectsFn | undefined | 创建重定向规则的回调。Docusaurus 针对它创建的每个路径查询这个回调,并使 用它的返回值输出更多路径。 |
备注
这个插件还将读取siteConfig.onDuplicateRoutes
配置,以在多个文件将被发送到同一位置时调整其日志级别。
Types
RedirectRule
type RedirectRule = {
to: string;
from: string | string[];
};
备注
from
和to
的概念是这个插件的核心。
"From"意味着你想要创建的路径,即一个额外的 HTML 文件将被写入;
"to"表示想要重定向的路径,通常是 Docusaurus 已经知道的路径。
这就是为什么同一个to
可以有多个from
:我们将创建多个 HTML 文件,它们都重定向到相同的目的地。
另一方面,一个from
永远不能有多个to
:编写的 HTML 文件需要有一个确定的目的地。
CreateRedirectsFn
// The parameter `path` is a route that Docusaurus has already created. It can
// be seen as the "to", and your return value is the "from". Returning a falsy
// value will not create any redirect pages for this particular path.
type CreateRedirectsFn = (path: string) => string[] | string | null | undefined;
示例配置
下面是一个示例配置:
docusaurus.config.js
module.exports = {
plugins: [
[
"@docusaurus/plugin-client-redirects",
{
fromExtensions: ["html", "htm"], // /myPage.html -> /myPage
toExtensions: ["exe", "zip"], // /myAsset -> /myAsset.zip (if latter exists)
redirects: [
// /docs/oldDoc -> /docs/newDoc
{
to: "/docs/newDoc",
from: "/docs/oldDoc",
},
// Redirect from multiple old paths to the new path
{
to: "/docs/newDoc2",
from: ["/docs/oldDocFrom2019", "/docs/legacyDocFrom2016"],
},
],
createRedirects(existingPath) {
if (existingPath.includes("/community")) {
// Redirect from /docs/team/X to /community/X and /docs/support/X to /community/X
return [
existingPath.replace("/community", "/docs/team"),
existingPath.replace("/community", "/docs/support"),
];
}
return undefined; // Return a falsy value: no redirect created
},
},
],
],
};