📦 plugin-client-redirects
道格龙(Docusaurus)插件,用于生成客户端重定向。
该插件会为你的静态站点额外生成 HTML 页面,通过 JavaScript 将用户重定向到你现有的道格龙页面。
production only
该插件在开发环境下始终处于非激活状态,仅在生产环境下生效,因为它依赖于构建产物。
注意
建议优先使用服务端重定向。
在使用本插件前,请先确认你的托管服务商是否已提供此功能。
安装
- npm
- Yarn
- pnpm
- Bun
npm install --save @docusaurus/plugin-client-redirects
yarn add @docusaurus/plugin-client-redirects
pnpm add @docusaurus/plugin-client-redirects
bun add @docusaurus/plugin-client-redirects
配置
可用配置项:
选项 | 类型 | 默认值 | 说明 |
---|---|---|---|
fromExtensions | string[] | [] | 重定向后需要移除的路由扩展名。 |
toExtensions | string[] | [] | 重定向后需要追加到路由的扩展名。 |
redirects | RedirectRule[] | [] | 重定向规则列表。 |
createRedirects | CreateRedirectsFn | undefined | 用于生成重定向规则的回调函数。道格龙会针对每个已创建的路径调用此回调,并根据返回值生成更多重定向路径。 |
备注
该插件还会读取 siteConfig.onDuplicateRoutes
配置项,在多个文件输出到同一路径时调整日志级别。
类型定义
RedirectRule
type RedirectRule = {
to: string;
from: string | string[];
};
备注
"from" 和 "to" 是本插件的核心概念。"from" 表示你希望创建的路径(即将额外生成的 HTML 文件);"to" 表示你希望重定向到的路径,通常是道格龙已知的路由。
因此,同一个 "to" 可以有多个 "from",我们会为每个 "from" 生成一个重定向到同一目标的 HTML 文件。而一个 "from" 只能有一个 "to",因为每个 HTML 文件只能有唯一的重定向目标。
CreateRedirectsFn
// 参数 `path` 是道格龙已创建的路由,可视为 "to",你的返回值为 "from"。返回假值时不会为该路径创建任何重定向页面。
type CreateRedirectsFn = (path: string) => string[] | string | null | undefined;
配置示例
以下是一个配置示例:
docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-client-redirects',
{
fromExtensions: ['html', 'htm'], // /myPage.html -> /myPage
toExtensions: ['exe', 'zip'], // /myAsset -> /myAsset.zip(如果存在该文件)
redirects: [
// /docs/oldDoc -> /docs/newDoc
{
to: '/docs/newDoc',
from: '/docs/oldDoc',
},
// 从多个旧路径重定向到新路径
{
to: '/docs/newDoc2',
from: ['/docs/oldDocFrom2019', '/docs/legacyDocFrom2016'],
},
],
createRedirects(existingPath) {
if (existingPath.includes('/community')) {
// 将 /docs/team/X 和 /docs/support/X 重定向到 /community/X
return [
existingPath.replace('/community', '/docs/team'),
existingPath.replace('/community', '/docs/support'),
];
}
return undefined; // 返回假值:不创建重定向
},
},
],
],
};