# Markdown 拓展

# 标题锚点

所有的标题将会自动地应用锚点链接,锚点的渲染规则可以通过 enhanceApp 中 mdConfig.anchor 来配置。

# 链接

# 内部链接

网站内部的链接,将会被转换成 <a> 用于 SPA 导航。同时,站内的每一个文件夹下的 README.md 或者 index.md 文件都会被自动编译为 index.html,对应的链接将被视为 /

以如下的文件结构为例:

.
├─ README.md
├─ foo
│  ├─ README.md
│  ├─ one.md
│  └─ two.md
└─ bar
   ├─ README.md
   ├─ three.md
   └─ four.md

假设你现在在 foo/one.md 中:

[Home](/) <!-- 跳转到根部的 README.md -->
[foo](/foo/) <!-- 跳转到 foo 文件夹的 index.html -->
[foo heading](./#heading) <!-- 跳转到 foo/index.html 的特定标题位置 -->
[bar - three](../bar/three.md) <!-- 具体文件可以使用 .md 结尾(推荐) -->
[bar - four](../bar/four.html) <!-- 也可以用 .html -->

# 外部链接

外部的链接将会被自动地设置为 target="_blank" rel="noopener noreferrer":

你可以自定义通过配置 enhanceApp 中 mdConfig.externalLinks 来自定义外部链接的特性。

# Front Matter

MdPress 提供了对 YAML front matter 开箱即用的支持:

---
title: Blogging Like a Hacker
lang: en-US
---

这些数据可以在当前 markdown 的正文,或者是任意的自定义或主题组件中使用。

想了解更多,请移步 Front Matter

# GitHub 风格的表格

输入

| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |

输出

Tables Are Cool
col 3 is right-aligned $1600
col 2 is centered $12
zebra stripes are neat $1

# Emoji

输入

:tada: :100:

输出

🎉 💯

你可以在这个列表找到所有可用的 Emoji。

# 目录

输入

[[toc]]

输出

目录(Table of Contents)的渲染可以通过 markdown.toc 选项来配置。

# 自定义容器 默认主题

输入

::: tip
这是一个提示
:::

::: warning
这是一个警告
:::

::: danger
这是一个危险警告
:::

::: details
这是一个详情块,在 IE / Edge 中不生效
:::

输出

::: tip 这是一个提示 :::

::: warning 这是一个警告 :::

::: danger 这是一个危险警告 :::

::: details 这是一个详情块,在 IE / Edge 中不生效 :::

你也可以自定义块中的标题:

::: danger STOP
危险区域,禁止通行
:::

::: details 点击查看代码
```js
console.log('你好,MdPress!')
```
:::

::: danger STOP 危险区域,禁止通行 :::

::: details 点击查看代码

console.log('你好,MdPress!')

:::

# 代码块中的语法高亮

MdPress 使用了 Prism 来为 markdown 中的代码块实现语法高亮。Prism 支持大量的编程语言,你需要做的只是在代码块的开始倒勾中附加一个有效的语言别名:

输入

``` js
export default {
  name: 'MyComponent',
  // ...
}
```

输出

export default {
  name: 'MyComponent',
  // ...
}

输入

``` html
<ul>
  <li
  >
    test
  </li>
</ul>
```

输出

<ul>
  <li
  >
    test
  </li>
</ul>

在 Prism 的网站上查看 合法的语言列表

# 代码块中的行高亮

输入

``` js {4}
export default {
  data () {
    return {
      msg: 'Highlighted!'
    }
  }
}
```

输出




 




export default {
  data () {
    return {
      msg: 'Highlighted!'
    }
  }
}

# 行号

你可以通过配置来为每个代码块显示行号:

module.exports = {
  markdown: {
    lineNumbers: true
  }
}
  • 示例:
Image Image

# 导入代码段 beta

你可以通过下述的语法导入已经存在的文件中的代码段:

<<< @/filepath

它也支持 行高亮

<<< @/filepath{highlightLines}

输入

<<< @/../@mdpress/markdown/__tests__/fragments/snippet.js{2}

输出


 


export default function () {
  // ..
}

::: tip 注意 由于代码段的导入将在 webpack 编译之前执行,因此你无法使用 webpack 中的路径别名,此处的 @ 默认值是 process.cwd()。 :::

# 进阶配置

MdPress 使用 markdown-it 来渲染 Markdown,上述大多数的拓展也都是通过自定义的插件实现的。想要进一步的话,你可以通过 .mdpress/enhaceApp.jsmdConfig 选项,来对当前的 markdown-it 实例做一些自定义的配置:

export default ({
  mdConfig, // 当前应用的 Markdown 额外配置
}) => {
  mdConfig = Object.assign({},mdConfig,{
   // markdown-it-anchor 的选项
   anchor: { permalink: false },
   // markdown-it-toc 的选项
   toc: { includeLevel: [1, 2] },
   extendMarkdown: md => {
     // 使用更多的 markdown-it 插件!
     md.use(require('markdown-it-xxx'))
   }
  })
}