主题配置项
通过
themeConfig
可配置传递给主题的配置项:
ts
import { defineConfig } from 'dumi';
export default defineConfig({
具体可用的配置项取决于项目当前使用的主题包,dumi 的默认主题目前支持如下配置项:
editLink
2.2.2+
-
类型:
boolean | string
-
默认值:
true
配置是否在 Markdown 页面内容区域底部展示当前文档的编辑链接。
当配置为
true
时 dumi 会根据项目
package.json
中的
repository
配置及当前分支,使用
hosted-git-info
自动生成编辑链接,仅支持
部分代码托管平台
;如果你使用的是其他代码托管平台或私有化部署的平台,可以使用字符串模板自定义编辑链接,例如
https://gitlab.example.com/group/repo/{filename}
,其中
{filename}
会被替换为当前文档在仓库中的文件路径。
sourceLink
2.3.0+
-
类型:
boolean | string
-
默认值:
true
主要用于 API Table 中类型的外链,目的是让没有文档的类型,直接导航到仓库中,方便用户参考。
用法与
editLink
类似,不过其自定义字符串模板比
editLink
多了一个
{line}
:
https://gitlab.example.com/group/repo/{filename}?L={line}
lastUpdated
2.2.2+
配置是否在 Markdown 页面内容区域底部展示当前文档的最后更新时间。
文档最后更新时间来源于 Git 提交记录,如果 Markdown 文档还未被 Git 追踪,那么则会展示构建时间;如果你的文档通过 GitHub Action 进行部署,还需要在
actions/checkout
步骤中加上
fetch-depth: 0
参数以检出所有 Git 提交记录,确保可以 dumi 可以拿到正确的最后更新时间,具体可参考
FAQ - 自动部署
。
logo
-
类型:
string | false
-
默认值:
dumi 的 LOGO
配置导航栏上的站点 LOGO,如果需要配置为本地图片文件,可将图片资源放入
public
文件夹,例如放置
public/logo.png
,则配置
/logo.png
即可。
配置为
false
时不展示 LOGO。
name
-
类型:
string
-
默认值:
undefined
配置导航栏上的站点名称,不配置时不展示。
nav
-
Navs
类型:
{ title: '导航标题', link: '导航路由', activePath: '高亮路径' }[] | Record<string, { title: '导航标题', link: '导航路由', activePath: '高亮路径' }[]>
-
类型:
Navs | {mode: "override" | "append" | "prepend", value: Navs}
-
默认值:
约定式导航
配置导航栏上的导航项,不配置时默认为约定式导航。约定式导航生成规则可参考
约定式路由
。
ts
nav: [{ title: 'Blog', link: '/blog' }],
'zh-CN': [{ title: '博客', link: '/blog' }],
'en-US': [{ title: 'Blog', link: '/en/blog' }],
value: [{ title: 'Blog', link: '/blog' }]
-
类型:
Record<'/nav_path', { title: '分组名称(可选)', children: { title: '菜单项', link: '菜单路由' }[] }[]>
-
默认值:
约定式侧边菜单
配置侧边栏菜单,
key
为导航路由,配置后对该导航下的所有一级子页面生效,例如
{ '/guide': [] }
只对
/guide
及
/guide/xxx
生效。
不配置时默认为约定式侧边菜单,约定式侧边菜单生成规则可参考
约定式路由
。
-
类型:
string | false
-
默认值:
Powered by dumi
配置页脚内容,可以是 HTML,配置
false
时不展示。
rtl
是否开启 RTL 切换,配置为
true
时导航栏会展示 RTL 按钮,用于将站点文本阅读方向切换为『从右到左』,通常在站点用户群体中有使用希伯来语或阿拉伯语时启用。
showLineNum
2.2.0+
是否在代码块中展示行号,配置为
true
时会展示代码行号。
nprogress
-
2.1.23+
切换页面时是否在页面顶部展示进度条,效果如
nprogress
。
prefersColor
-
类型:
{ default: 'light' | 'dark' | 'auto'; switch: boolean }
-
默认值:
{ default: 'light', switch: true }
配置站点的主题色,其中
default
配置项为默认主题色,默认为亮色模式,配置为
auto
时将跟随用户的操作系统配置自动切换;
switch
配置项控制主题色切换器的展示与否,配置为
false
时用户将无法主动切换站点主题色。
对于普通文档站点来说,建议保持
switch
的默认值
true
,将站点主题色的选择权交给用户,同时可以考虑将
default
设置为
auto
以跟随用户的系统配置:
ts
prefersColor: { default: 'auto' },
对于组件库文档站点来说,建议根据组件库对暗色模式的适配情况来选择是否配置
switch
为
false
,避免用户切换主题色后组件 demo 的样式出现异常。
对于主题开发者来说,可以在 Less 文件中使用
@dark-selector
的全局变量来为主题包的组件增加暗色模式的样式:
socialLinks
如果想要在顶部导航栏右侧增加一些社交网站的外链图标,可以通过
socialLinks
进行配置,目前最多支持配置
5
个外链图标
目前支持以下社交平台图标:
Key
|
描述
|
github
|
GitHub 平台
|
weibo
|
微博平台
|
x
|
X(Twitter)平台
|
gitlab
|
Gitlab 平台
|
facebook
|
Facebook 平台
|
zhihu
|
知乎平台
|
yuque
|
语雀平台
|
linkedin
|
Linkedin 平台
|
ts
github: 'https://github.com/umijs/dumi',
facebook: 'https://xxxx',
linkedin: 'https://xxxx',
基础配置项
对于 dumi 中能使用的自定义配置,你可以使用项目根目录的
.dumirc.ts
文件或者
config/config.ts
,值得注意的是这两个文件功能一致,仅仅是存在目录不同,2 选 1 ,
.dumirc.ts
文件优先级较高。
更多目录相关信息介绍,你可以在
目录结构
了解。
dumi 的配置文件是一个正常的 node 模块,它在执行 dumi 命令行的时候使用,并且不包含在浏览器端构建中。
这里有一个最简单的 dumi 配置文件的范例:
ts
import { defineConfig } from 'dumi';
export default defineConfig({
使用
defineConfig
包裹配置是为了在书写配置文件的时候,能得到更好的拼写联想支持。如果你不需要,直接
export default {}
也可以。
值得关注的是在你使用 dumi 的时候,你不需要了解每一个配置的作用。你可以大致的浏览一下以下 dumi 支持的所有配置,然后在你需要的时候,再回来查看如何启用和修改你需要的内容。
为方便查找,以下配置项通过字母排序。
alias
-
类型:
Record<string, string>
-
默认值:
{}
配置别名,对 import 语句的 source 做映射。
比如:
然后代码里
import 'foo'
实际上会
import '/tmp/to/foo'
。
有几个 Tip。
1、alias 的值最好用绝对路径,尤其是指向依赖时,记得加
require.resolve
,比如,
js
foo: require.resolve('foo'),
2、如果不需要子路径也被映射,记得加
$
后缀,比如
autoprefixer
-
类型:
object
-
默认值:
{ flexbox: 'no-2009' }
用于解析 CSS 并使用来自 Can I Use 的值将供应商前缀添加到 CSS 规则。如自动给 CSS 添加
-webkit-
前缀。
更多配置,请查阅
autoprefixer 的配置项
。
analyze
通过指定
ANALYZE=1
环境变量分析产物构成时,analyzer 插件的具体配置项,见
webpack-bundle-analyzer
base
要在非根目录下部署 dumi 项目时,你可以使用 base 配置。
base 配置允许你为应用程序设置路由前缀。比如有路由
/
和
/users
,设置 base 为
/foo/
后就可通过
/foo/
和
/foo/users
访问到之前的路由。
注意:base 配置必须在构建时设置,并且不能在不重新构建的情况下更改,因为该值内联在客户端包中。
cacheDirectoryPath
-
类型:
string
-
默认值:
node_modules/.cache
默认情况下 dumi 会将构建中的一些缓存文件存放在
node_modules/.cache
目录下,比如 logger 日志,webpack 缓存,mfsu 缓存等。你可以通过使用
cacheDirectoryPath
配置来修改 dumi 的缓存文件目录。
示例,
js
cacheDirectoryPath: 'node_modules/.cache1',
chainWebpack
-
类型:
(memo, args) => void
-
默认值:
null
为了扩展 dumi 内置的 webpack 配置,我们提供了用链式编程的方式修改 webpack 配置,基于 webpack-chain,具体 API 可参考
webpack-api 的文档
。
如下所示:
js
chainWebpack(memo, args) {
该函数具有两个参数:
-
memo
是现有 webpack 配置
-
args
包含一些额外信息和辅助对象,目前有
env
和
webpack
。
env
为当前环境,值为
development
或
production
;
webpack
为 webpack 对象,可从中获取 webpack 内置插件等
用法示例:
js
chainWebpack(memo, { env, webpack }) {
memo.resolve.alias.set('foo', '/tmp/to/foo');
memo.plugin('hello').use(Plugin, [...args]);
memo.plugins.delete('hmr');
clickToComponent
-
类型:
{ editor?: string }
-
默认值:
false
当前仅 React 项目支持。
开启后,可通过
Option+Click/Alt+Click
点击组件跳转至编辑器源码位置,
Option+Right-click/Alt+Right-click
可以打开上下文,查看父组件。
关于参数。
editor
为编辑器名称,默认为 'vscode',支持
vscode
&
vscode-insiders
。
配置 clickToComponent 的行为,详见
click-to-component
。
示例:
codeSplitting
-
类型:
{ jsStrategy: 'bigVendors' | 'depPerChunk' | 'granularChunks'; jsStrategyOptions: {} }
-
默认值:
null
用于配置 code splitting 的策略方案,dumi 默认以路由为分界拆分 chunk,实现路由维度的 chunk 按需加载,如果在此之上希望继续提取公共 chunk,可以选择合适的策略进行配置,差异如下。
bigVendors 是大 vendors 方案,会将 async chunk 里的 node_modules 下的文件打包到一起,可以避免重复。同时缺点是,1)单文件的尺寸过大,2)毫无缓存效率可言。
depPerChunk 和 bigVendors 类似,不同的是把依赖按 package name + version 进行拆分,算是解了 bigVendors 的尺寸和缓存效率问题。但同时带来的潜在问题是,可能导致请求较多。我的理解是,对于非大型项目来说其实还好,因为,1)单个页面的请求不会包含非常多的依赖,2)基于 HTTP/2,几十个请求不算问题。但是,对于大型项目或巨型项目来说,需要考虑更合适的方案。
granularChunks 在 bigVendors 和 depPerChunk 之间取了中间值,同时又能在缓存效率上有更好的利用。无特殊场景,建议用 granularChunks 策略。
conventionLayout
-
类型:
boolean
-
默认值:
undefined
src/layouts/index.[tsx|vue|jsx|js]
为约定式布局,默认开启。可通过配置
conventionLayout: false
关闭该默认行为。
conventionRoutes
-
类型:
{ base: string; exclude: RegExp[] }
-
默认值:
{ base: './.dumi/pages', exclude: [/(\/|^)(\.|_\/)/] }
修改默认的约定式路由规则,仅在使用 dumi 约定式路由时有效,约定式路由也叫文件路由,就是不需要手写配置,文件系统即路由,通过目录和文件及其命名分析出路由配置。
使用约定式路由时,约定
.dumi/pages
下所有的
(j|t)sx?
文件即路由。
你可以从
约定式路由
查看更多说明。
base
base
用于设置约定的路由的基础路径,默认从
.dumi/pages
读取,如果是文档站点可能会需要将其改成
./docs
;
exclude
你可以使用
exclude
配置过滤一些不需要的文件,比如用于过滤 components、models 等。
示例,
js
exclude: [/\/components\//, /\/models\//],
copy
-
类型:
Array<string | { from: string; to: string; }>
-
默认值:
[]
配置要复制到输出目录的文件或文件夹。
当配置字符串时,默认拷贝到产物目录,如:
ts
copy: ['foo.json', 'src/bar.json']
会产生如下产物的结构:
你也可以通过对象配置具体的拷贝位置,其中相对路径的起点为项目根目录:
ts
{ from: 'from', to: 'dist/output' },
{ from: 'file.json', to: 'dist' }
此时将产生如下产物结构:
crossorigin
-
类型:
{ includes?: string[] }
-
默认值:
false
配置 script 标签的 crossorigin。如果有声明,会为本地 script 加上 crossorigin="anonymous" 的属性。
关于参数。
includes
参数可以为额外的非本地 script 标签加上此属性。
比如:
然后输出的 HTML 中会有这些变化,
diff
<script src="/umi.js"></script>
<script src="/umi.js" crossorigin="anonymous"></script>
cssMinifier
-
类型:
string
可选的值:
esbuild
,
cssnano
,
parcelCSS
,
none
-
默认值:
esbuild
配置构建时使用的 CSS 压缩工具;
none
表示不压缩。
示例:
cssMinifierOptions
cssMinifier
CSS 压缩工具配置选项。
示例:
对应 CSS 压缩的配置请查看对应的文档。
cssPublicPath
为 CSS 中的图片、文件等外部资源指定自定义公共路径。作用类似于
publicPath
默认值是
./
。
cssLoader
配置 css-loader ,详见
css-loader > options
define
-
类型:
Record<string, string>
-
默认值: 如下
'process.env.NODE_ENV' : process.env.NODE_ENV,
'process.env.HMR' : process.env.HMR,
'process.env.SOCKET_SERVER': process.env.ERROR_OVERLAY'
基于
define-plugin 插件
设置代码中的可用变量。