你可以通过将 window.$docsify
定义为一个对象来配置 Docsify:
<script>
window.$docsify = {
repo: 'docsifyjs/docsify',
maxLevel: 3,
coverpage: true,
};
</script>
配置也可以定义为函数,在这种情况下,第一个参数是 Docsify vm
实例。 该函数应该返回一个配置对象。 这对于在 markdown 配置等地方引用 vm
非常有用:
<script>
window.$docsify = function (vm) {
return {
markdown: {
renderer: {
code(code, lang) {
// ... use `vm` ...
},
},
},
};
};
</script>
- 类型:
Object
设置路由别名。 你可以自由管理路由规则。 支持 RegExp。 请注意,顺序很重要! 如果一个路由可以被多个别名匹配,那么你首先声明的路由优先。
window.$docsify = {
alias: {
'/foo/(.*)': '/bar/$1', // supports regexp
'/zh-cn/changelog': '/changelog',
'/changelog':
'https://raw.githubusercontent.com/docsifyjs/docsify/main/CHANGELOG',
// You may need this if you use routerMode:'history'.
'/.*/_sidebar.md': '/_sidebar.md', // See #301
},
};
注意 如果将
routerMode
更改为'history'
,可能 需要为_sidebar.md
和_navbar.md
文件配置别名。
- 类型:
Boolean
- 默认:
false
更改路由时,滚动到屏幕顶部。
window.$docsify = {
auto2top: true,
};
- 类型:
Boolean
- 默认:
false
同时设置 loadSidebar
和 autoHeader
后,可以根据 _sidebar.md
的内容自动为每个页面增加标题。 参见 #78。
window.$docsify = {
loadSidebar: true,
autoHeader: true,
};
- 类型:
String
网站的基本路径。 你可以将其设置为另一个目录或另一个域名。
window.$docsify = {
basePath: '/path/',
// 直接渲染其他域名的文档
basePath: 'https://docsify.js.org/',
// 甚至直接渲染其他仓库
basePath:
'https://raw.githubusercontent.com/ryanmcdermott/clean-code-javascript/master/',
};
- 类型:
Boolean
- 默认:
true
决定 Docsify 是否应自动处理未捕获的 synchronous 插件错误。 这可以防止插件错误影响 docsify 正确呈现实时网站内容的能力。
- 类型:
String
- 默认:
'_blank'
右上角外部链接的打开方式。 默认为 '_blank'
(在新窗口或者标签页中打开)
window.$docsify = {
cornerExternalLinkTarget: '_self', // default: '_blank'
};
- 类型:
Boolean|String|String[]|Object
- 默认:
false
激活封面功能。 如果为 true,它将从 _coverpage.md
中加载。
window.$docsify = {
coverpage: true,
// 自定义文件名
coverpage: 'cover.md',
// 多个封面页
coverpage: ['/', '/zh-cn/'],
// 多个封面页,并指定文件名
coverpage: {
'/': 'cover.md',
'/zh-cn/': 'cover.md',
},
};
- 类型:
String
- 默认:
'#app'
要在初始化时挂载的 DOM 元素。 它可以是一个 CSS 选择器字符串或实际的 HTMLElement。
window.$docsify = {
el: '#app',
};
- 类型:
Boolean
- 默认:
null
执行页面上的脚本。 仅解析第一个脚本标签(demo)。 如果检测到 Vue ,默认情况下是 true
。
window.$docsify = {
executeScript: true,
};
## This is test
<script>
console.log(2333)
</script>
注意,如果运行的是外部脚本,例如嵌入的 jsfidle demo,请务必包含 external-script 插件。
- 类型:
String
- 默认:
'.md'
请求文件扩展名。
window.$docsify = {
ext: '.md',
};
- 类型:
String
- 默认:
'noopener'
默认为 'noopener'
(no opener) 可以防止新打开的外部页面(当 externalLinkTarget 设为 '_blank'
时)能够控制我们的页面。 如果不是 '_blank'
,则不会设置 rel
。 查看此帖获取更多关于你可能想要使用此选项的信息。
window.$docsify = {
externalLinkRel: '', // default: 'noopener'
};
- 类型:
String
- 默认:
'_blank'
在 markdown 中打开外部链接的目标。 外部链接的打开方式。默认为 '_blank'
(在新窗口或者标签页中打开)
window.$docsify = {
externalLinkTarget: '_self', // default: '_blank'
};
- 类型:
Array<string>
当页面请求时,如果给定的本地语言不存在,则回退到默认语言的语言列表。
示例:
- 尝试获取
/de/overview
页面。 如果该页面存在,就会显示出来。 - 如果不存在则尝试
/overview
(取决于默认语言),如果存在即显示。 如果该页面存在,就会显示出来。 - 然后显示 404 页面。
window.$docsify = {
fallbackLanguages: ['fr', 'de'],
};
- 类型:
String|Function
我们可以通过 {docsify-updated} 变量显示文档更新日期。 并通过 formatUpdated
进行格式化。
参见 https://github.com/lukeed/tinydate#patterns
window.$docsify = {
formatUpdated: '{MM}/{DD} {HH}:{mm}',
formatUpdated(time) {
// ...
return time;
},
};
- 类型:
Boolean
- 默认:
true
该选项将完全隐藏侧边栏,不会在侧边显示任何内容。
window.$docsify = {
hideSidebar: true,
};
- 类型:
String
- 默认:
'README.md'
文档文件夹中的 README.md
将被视为网站的主页,但有时你可能需要将另一个文件作为主页。
window.$docsify = {
// Change to /home.md
homepage: 'home.md',
// Or use the readme in your repo
homepage:
'https://raw.githubusercontent.com/docsifyjs/docsify/main/README.md',
};
- 类型:
Boolean|Object
- 默认:
Object
- \ 切换侧边栏菜单
- / 焦点在搜索文本框处。 还支持 alt / ctrl + k。
将组合键绑定到自定义回调函数。
键 bindings
定义为用 +
分隔的大小写不敏感的字符串值。 修改键值包括 alt
、ctrl
、meta
和 shift
。 非修饰符键值应与键盘事件的 key 或 code 值相匹配。
callback
函数接收按键事件作为参数。
!> 让网站访问者知道你的自定义按键绑定功能可用! 如果绑定与 DOM 元素相关联,可考虑插入一个 <kbd>
元素作为视觉提示(如alt+a),或添加 title 和 aria-keyshortcuts 属性作为悬停/焦点提示。
window.$docsify = {
keyBindings: {
// Custom key binding
myCustomBinding: {
bindings: ['alt+a', 'shift+a'],
callback(event) {
alert('Hello, World!');
},
},
},
};
通过将绑定配置设置为 false
,可以完全或单独禁用按键绑定。
window.$docsify = {
// Disable all key bindings
keyBindings: false,
};
window.$docsify = {
keyBindings: {
// Disable individual key bindings
focusSearch: false,
toggleSidebar: false,
},
};
- 类型:
Boolean|String
- 默认:
false
如果true,则从 Markdown 文件 _navbar.md
加载导航栏,否则从指定路径加载。
window.$docsify = {
// 加载 _navbar.md
loadNavbar: true,
// 加载 nav.md
loadNavbar: 'nav.md',
};
- 类型:
Boolean|String
- 默认:
false
如果true,则从 Markdown 文件 _sidebar.md
加载侧边栏,否则从指定路径加载。
window.$docsify = {
// 加载 _sidebar.md
loadSidebar: true,
// 加载 summary.md
loadSidebar: 'summary.md',
};
- 类型:
String
在侧边栏显示的网站 Logo。 你可以使用 CSS 调整它的大小。
!> 只有同时设置了 name
,Logo 才会可见。 请参阅 name 配置。
window.$docsify = {
logo: '/_media/icon.svg',
};
- 类型:
Function
参考 Markdown 配置。
window.$docsify = {
// object
markdown: {
smartypants: true,
renderer: {
link() {
// ...
},
},
},
// function
markdown(marked, renderer) {
// ...
return marked;
},
};
- 类型:
Number
- 默认:
6
最大表格内容级别。
window.$docsify = {
maxLevel: 4,
};
- 类型:
Boolean
- 默认:
false
在较小的屏幕上,导航栏将与侧边栏合并。
window.$docsify = {
mergeNavbar: true,
};
- 类型:
String
在侧边栏中显示的网站名称。
window.$docsify = {
name: 'docsify',
};
名称字段也可包含自定义 HTML,以方便定制:
window.$docsify = {
name: '<0>docsify</0>',
};
- 类型:
String
- 默认:
'window.location.pathname'
网站 name
链接到的 URL。
window.$docsify = {
nameLink: '/',
// 按照路由切换
nameLink: {
'/zh-cn/': '/zh-cn/',
'/': '/',
},
};
- 类型:
Boolean
- 默认:
false
使用 GitHub 风格表情图像或原生表情符号字符来渲染表情符号。
window.$docsify = {
nativeEmoji: true,
};
:smile:
:partying_face:
:joy:
:+1:
:-1:
false
时为 GitHub 样式的图像:
false
时为原生字符的图像:
要渲染短代码作为文本,用“:”HTML实体替换:
字符。
:100:
💯
- 类型:
Array<string>
有时我们不希望 docsify 处理我们的链接。 参考 #203。 我们可以通过指定字符串数组来跳过某些链接的编译。 每个字符串都会被转换成正则表达式 (RegExp
),链接的 whole href 会与之匹配。
window.$docsify = {
noCompileLinks: ['/foo', '/bar/.*'],
};
- 类型:
Boolean
- 默认:
false
禁用表情符号解析,并将所有表情符号短代码显示为文本。
window.$docsify = {
noEmoji: true,
};
:100:
💯
要禁用单个短代码的表情符号解析功能,请将 :
字符替换为 :
HTML 实体。
:100:
:100:
💯
💯
- 类型:
Boolean|String|Object
- 默认:
false
显示默认 "404 - Not Found" 消息:
window.$docsify = {
notFoundPage: false,
};
在找不到指定页面时加载 _404.md
:
window.$docsify = {
notFoundPage: true,
};
加载自定义404页面:
window.$docsify = {
notFoundPage: 'my404.md',
};
加载正确的本地化过的404页面:
window.$docsify = {
notFoundPage: {
'/': '_404.md',
'/de': 'de/_404.md',
},
};
注意:配置过
fallbackLanguages
选项的页面与notFoundPage
选项冲突。
- 类型:
Boolean
- 默认:
false
只在访问主页时加载封面。
window.$docsify = {
onlyCover: false,
};
- 类型:
Boolean
- 默认:
false
如果该选项设为 true ,那么链接会使用相对路径。
例如,目录结构如下:
.
└── docs
├── README.md
├── guide.md
└── zh-cn
├── README.md
├── guide.md
└── config
└── example.md
如果启用了相对路径,当前链接是 http://domain.com/zh-cn/README
,对应的链接会解析为:
guide.md => http://domain.com/zh-cn/guide
config/example.md => http://domain.com/zh-cn/config/example
../README.md => http://domain.com/README
/README.md => http://domain.com/README
window.$docsify = {
// 启用相对路径
relativePath: true,
// 禁用相对路径(默认值)
relativePath: false,
};
- 类型:
String
配置仓库地址或者 username/repo
的字符串,会在页面右上角渲染一个 GitHub Corner 挂件。
window.$docsify = {
repo: 'docsifyjs/docsify',
// or
repo: 'https://github.com/docsifyjs/docsify/',
};
- 类型:
Object
设置请求资源的请求头。
window.$docsify = {
requestHeaders: {
'x-token': 'xxx',
},
};
例如设置缓存
window.$docsify = {
requestHeaders: {
'cache-control': 'max-age=600',
},
};
配置网站路径将使用的 URL 格式。
- 类型:
String
- 默认:
'hash'
window.$docsify = {
routerMode: 'history', // default: 'hash'
};
对于静态部署的站点(如 在 GitHub 页面上)基于哈希的路由设置更简单。 对于可以重写 URL 的网站,基于历史记录的格式 更好(特别是对于搜索引擎优化而言,基于哈希值的路由对搜索引擎并不 那么友好)。
基于哈希值的路由选择意味着所有 URL 路径都将在
地址栏中以 /#/
作为前缀。 这是一种技巧,它允许网站加载 /index.html
,然后
使用 #
后面的路径来决定加载哪些 markdown 文件。 例如,
一个完整的基于哈希值的 URL 可以如下所示:
https://example.com/#/path/to/page
。 浏览器将实际加载
https://example.com
(假设你的静态服务器默认提供
index.html
,大多数服务器都是这样做的),然后 Docsify JavaScript 代码将
查看 /#/...
,并确定要加载和渲染的标记符文件。
此外,点击链接时,Docsify 路由器会动态更改哈希值之后的
内容。 无论如何,location.pathname
的值仍将是
/
。 当在浏览器中访问这样的 URL 时,哈希路径的部分_不会_被发送到服务器。
另一方面,基于历史的路由意味着 Docsify JavaScript 将使用
History API
来动态更改 URL,而无需使用 #
。 这意味着,搜索引擎将把所有网址
视为"真实"网址,在浏览器中访问网址时,完整路径将被发送到
服务器。 例如,URL 可能看起来像
https://example.com/path/to/page
。 浏览器将尝试直接从服务器加载完整的 URL
,而不仅仅是 https://example.com
。 这样做的好处是这些类型的 URL 对搜索引擎更友好,可以被索引(耶!)。 但缺点是,你的服务器或
存放网站文件的地方必须能够处理这些 URL。 各种静态
网站托管服务允许配置"重写规则",这样就可以配置
服务器,使其无论访问
的路径是什么,都始终发回 /index.html
。 location.pathname
的值将显示 /path/to/page
,因为
实际上已经发送到服务器。
简要说明:从 hash
路由开始(默认)。 如果你有冒险精神,可以学习
如何配置服务器,然后切换到 history
模式,以获得更好的体验
,URL 中不含 #
,并进行搜索引擎优化。
注意 如果使用
routerMode: 'history'
,可能需要添加 [alias
](#alias),以便无论访问哪个路径,都能 加载_sidebar.md
和_navbar.md
文件。window.$docsify = { routerMode: 'history', alias: { '/.*/_sidebar.md': '/_sidebar.md', '/.*/_navbar.md': '/_navbar.md', }, };
- 类型:
Object
定义能动态提供内容的 “虚拟” 路由。 路由是预期路径与字符串或函数之间的映射。 如果映射值是字符串,它将被视为 markdown 并进行相应的解析。 如果是函数,则应返回 markdown 内容。
路由函数接收最多三个参数:
route
- 请求的路由路径(例如/bar/baz
)matched
- 路由匹配的RegExpMatchArray
(例如,对于/bar/(.+)
,你会得到['/bar/baz', 'baz']
)next
- 这是一个回调,当路由函数为异步时可以调用
请注意,顺序很重要! 路由的匹配顺序与你声明路由的顺序相同,这意味着在路由重叠的情况下,你可能希望先列出更具体的路由。
window.$docsify = {
routes: {
// Basic match w/ return string
'/foo': '# Custom Markdown',
// RegEx match w/ synchronous function
'/bar/(.*)'(route, matched) {
return '# Custom Markdown';
},
// RegEx match w/ asynchronous function
'/baz/(.*)'(route, matched, next) {
fetch('/api/users?id=12345')
.then(response => {
next('# Custom Markdown');
})
.catch(err => {
// Handle error...
});
},
},
};
除字符串外,路由函数还可以返回一个假值(null
\ undefined
),以表示忽略当前请求:
window.$docsify = {
routes: {
// accepts everything other than dogs (synchronous)
'/pets/(.+)'(route, matched) {
if (matched[0] === 'dogs') {
return null;
} else {
return 'I like all pets but dogs';
}
}
// accepts everything other than cats (asynchronous)
'/pets/(.*)'(route, matched, next) {
if (matched[0] === 'cats') {
next();
} else {
// Async task(s)...
next('I like all pets but cats');
}
}
}
}
最后,如果某个特定路径有真正的 markdown 文件(因此路由不应匹配该文件),可以通过返回一个明确的 false
值将其排除在外:
window.$docsify = {
routes: {
// if you look up /pets/cats, docsify will skip all routes and look for "pets/cats.md"
'/pets/cats'(route, matched) {
return false;
}
// but any other pet should generate dynamic content right here
'/pets/(.+)'(route, matched) {
const pet = matched[0];
return `your pet is ${pet} (but not a cat)`;
}
}
}
- 类型:
Boolean|String|Object
- 默认:
'Skip to main content'
决定是否/如何显示网站的 skip navigation link。
// Render skip link for all routes (default)
window.$docsify = {
skipLink: 'Skip to main content',
};
// Render localized skip links based on route paths
window.$docsify = {
skipLink: {
'/es/': 'Saltar al contenido principal',
'/de-de/': 'Ga naar de hoofdinhoud',
'/ru-ru/': 'Перейти к основному содержанию',
'/zh-cn/': '跳到主要内容',
},
};
// Do not render skip link
window.$docsify = {
skipLink: false,
};
- 类型:
Number
- 默认:
0
在自定义侧边栏中添加目录 (TOC)。
window.$docsify = {
subMaxLevel: 2,
};
如果你在侧边栏中设置了主页链接,并希望它在访问根网址时显示为活动状态,请确保相应更新侧边栏:
- Sidebar
- [Home](/)
- [Another page](another.md)
详见#1131。
!> 自 v5 起已弃用。 使用 --theme-color
主题属性 自定义 主题颜色。
- 类型:
String
自定义主题颜色。
window.$docsify = {
themeColor: '#3F51B5',
};
!> 自 v5 起已弃用。 在使用粘性导航栏时,使用 --scroll-padding-top
主题属性 指定滚动边距。
- 类型:
Number|String
- 默认:
0
在视口顶部添加滚动填充。 当你添加了一个粘性或"固定"元素,并希望自动滚动与元素底部对齐时,该功能非常有用。
window.$docsify = {
topMargin: 90, // 90, '90px', '2rem', etc.
};
- 类型:
Object
创建并注册全局 Vue。 指定组件时,以组件名称为键,以包含 Vue 选项的对象为值。 组件 data
在每个实例中都是唯一的,不会在用户导航站点时持续存在。
window.$docsify = {
vueComponents: {
'button-counter': {
template: `
<0>
You clicked me {{ count }} times
</0>
`,
data() {
return {
count: 0,
};
},
},
},
};
<button-counter></button-counter>
- 类型:
Object
指定全局 Vue 选项,以便与未通过 vueMounts、vueComponents 或 markdown script 明确加载的 Vue 内容一起使用。 对全局 data
的更改将持续存在,并在使用全局引用的任何地方得到反映。
window.$docsify = {
vueGlobalOptions: {
data() {
return {
count: 0,
};
},
},
};
<0>
<1>-</1>
{{ count }}
<2>+</2>
</0>
- {{ count }} +
- 类型:
Object
指定要挂载为 Vue 实例的 DOM 元素及其相关选项。 每次加载新页面时,Docsify 都会在主内容区域挂载第一个匹配元素。 挂载元素 data
是每个实例的唯一特性,不会在用户导航站点时持续存在。
window.$docsify = {
vueMounts: {
'#counter': {
data() {
return {
count: 0,
};
},
},
},
};
<div id="counter">
<button @click="count -= 1">-</button>
{{ count }}
<button @click="count += 1">+</button>
</div>