手动迁移
This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output.
项目设置
package.json
包命名空间
在 Docusaurus 2 中,我们的包名都是有命名空间的:
docusaurus
→@docusaurus/core
这允许我们把 Docusaurus 官方包和社区维护的包明确区分开来。 换句话说,所有 Docusaurus 的官方包都会在 @docusaurus/
命名空间下。
与此同时,Docusaurus 1 提供的默认文档站点功能现在由 @docusaurus/preset-classic
提供。 所以我们也需要添加这个依赖项:
{
dependencies: {
- "docusaurus": "^1.x.x",
+ "@docusaurus/core": "^2.0.0-beta.0",
+ "@docusaurus/preset-classic": "^2.0.0-beta.0",
}
}
请使用最新的 Docusaurus 2 版本,你可以在这里查看(用 latest
标签)。
CLI 命令
与此同时,CLI 命令被重命名为了 docusaurus <command>
(而不是 docusaurus-command
)。
你的 package.json
的 "scripts"
部分应该更新为如下内容:
{
"scripts": {
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy"
// ...
}
}
典型的 Docusaurus 2 package.json
一般看起来像这样:
{
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"serve": "docusaurus serve",
"clear": "docusaurus clear"
},
"dependencies": {
"@docusaurus/core": "^2.0.0-beta.0",
"@docusaurus/preset-classic": "^2.0.0-beta.0",
"clsx": "^1.1.1",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"browserslist": {
"production": [">0.5%", "not dead", "not op_mini all"],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
更新 build
目录的引用
在 Docusaurus 1 中,所有构建输出都位于 website/build/<项目名>
中。
在 Docusaurus 2 中,它现在变成了 website/build
。 确保你更新了部署配置,能够从正确的 build
目录中读取生成的文件。
如果你 要部署到 GitHub pages,请务必运行 yarn deploy
而不是 yarn publish-gh-pages
脚本。
.gitignore
你的 website
文件夹的 .gitignore
应该包含:
# 依赖项
/node_modules
# 构建
/build
# 生成文件
.docusaurus
.cache-loader
# 其他
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
README
D1 网站可能已经有一个 README 文件了。 你可以修改它以反映 D2 的变更,也可以复制一份默认的 Docusaurus v2 README。
站点配置
docusaurus.config.js
把 siteConfig.js
重命名为 docusaurus.config.js
。
在 Docusaurus 2 中,我们把每个功能(博客、文档、页面)都模块化成了一个插件。 预设是一组插件的打包。为了向后兼容,我们制作了 @docusaurus/preset-classic
预设,它打包了 Docusaurus 1 中的大多数必需插件。
在你的 docusaurus.config.js
中添加如下预设配置:
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
// 相对于站点目录的文档目录路径。
path: '../docs',
// 相对于站点目录的侧边栏文件。
sidebarPath: require.resolve('./sidebars.json'),
},
// ...
},
],
],
};
我们建议把 docs
目录移进 website
目录。v2 的默认文件结构也是这样的。 Vercel 开箱即用地支持 Docusaurus 项目部署,但前提是 docs
目录在 website
里面。 一般来说,docs 在 website 里也要更好一点,把文档和其余的网站代码放在同一个 website
目录中,便于检索。
如果你正在迁移 Docusaurus v1 网站,但还有文档拉取请求未合并,你可以暂时把 /docs
文件夹保留在原来的位置,避免产生冲突。
下面的指南列出了 siteConfig.js
的每个字段以供参考。
已更新字段
baseUrl
, tagline
, title
, url
, favicon
, organizationName
, projectName
, githubHost
, scripts
, stylesheets
无需操作,这些配置字段没有变化。
colors
已废弃。 我们为 Docusaurus 2 编写了一个叫 Infima 的独立 CSS 框架,这个框架使用了 CSS 变量来做样式。 文档还没有完工,完成后我们会在这里更新链接。 要覆盖 Infima 的 CSS 变量,请创建你自己的 CSS 文件(比如 ./src/css/custom.css
),把它作为 @docusaurus/preset-classic
的选项全局导入:
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
theme: {
customCss: [require.resolve('./src/css/custom.css')],
},
},
],
],
};
Infima 每种颜色都使用 7 种色度。
/**
* 你可以在这里覆盖默认的 Infima 变量。
* 注意:这不是完整的 --ifm- 变量列表。
*/
:root {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: rgb(33, 175, 144);
--ifm-color-primary-darker: rgb(31, 165, 136);
--ifm-color-primary-darkest: rgb(26, 136, 112);
--ifm-color-primary-light: rgb(70, 203, 174);
--ifm-color-primary-lighter: rgb(102, 212, 189);
--ifm-color-primary-lightest: rgb(146, 224, 208);
}
我们建议用 ColorBox 为你选择的主色调生成不同的色度。
或者,可以用下面的工具来生成不同的色度,然后把变量复制进 src/css/custom.css
。
主色调最好至少有 WCAG-AA 对比度,以保证可读性。你可以用 Docusaurus 自己的网站来预览你的配色的效果。深色模式下,你可以换一套配色,因为同一种颜色一般不能在浅色和深色模式下都保持足够的可读性。
CSS 变量名称 | 十六进制值 | 颜色调整值 | 对比度评分 |
---|---|---|---|
--ifm-color-primary-lightest | #3cad6e | Fail 🔴 | |
--ifm-color-primary-lighter | #359962 | Fail 🔴 | |
--ifm-color-primary-light | #33925d | Fail 🔴 | |
--ifm-color-primary | #2e8555 | 0 | AA 👍 |
--ifm-color-primary-dark | #29784c | AA 👍 | |
--ifm-color-primary-darker | #277148 | AA 👍 | |
--ifm-color-primary-darkest | #205d3b | AAA 🏅 |
把 src/css/custom.css
中的变量替换成这些新变量。
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
--ifm-color-primary-darker: #277148;
--ifm-color-primary-darkest: #205d3b;
--ifm-color-primary-light: #33925d;
--ifm-color-primary-lighter: #359962;
--ifm-color-primary-lightest: #3cad6e;
}
footerIcon
, copyright
, ogImage
, twitterImage
, docsSideNavCollapsible
网站元信息,比如资源、SEO、版权信息等,现在由主题处理。 要自定义它们,可以使用 docusaurus.config.js
中的 themeConfig
字段:
module.exports = {
// ...
themeConfig: {
footer: {
logo: {
alt: 'Meta 开源图标',
src: '/img/meta_oss_logo.png',
href: 'https://opensource.facebook.com/',
},
copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc.`, // 你也可以用自己的 HTML。
},
image: 'img/docusaurus.png',
// ...
},
};
headerIcon
, headerLinks
在 Docusaurus 1 中,导航栏图标和导航栏链接是 siteConfig
中的根字段:
headerIcon: 'img/docusaurus.svg',
headerLinks: [
{ doc: "doc1", label: "上手" },
{ page: "help", label: "帮助" },
{ href: "https://github.com/", label: "GitHub" },
{ blog: true, label: "博客" },
],
现在,这些字段都是由主题处理的:
module.exports = {
// ...
themeConfig: {
navbar: {
title: 'Docusaurus',
logo: {
alt: 'Docusaurus 图标',
src: 'img/docusaurus.svg',
},
items: [
{to: 'docs/doc1', label: '上手', position: 'left'},
{to: 'help', label: '帮助', position: 'left'},
{
href: 'https://github.com/',
label: 'GitHub',
position: 'right',
},
{to: 'blog', label: '博客', position: 'left'},
],
},
// ...
},
};