Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kricsleo/unplugin-markdown-2-html

📖 Compile markdown into html at build time.
https://github.com/kricsleo/unplugin-markdown-2-html

Last synced: 24 days ago
JSON representation

📖 Compile markdown into html at build time.

Awesome Lists containing this project

README

        


unplugin-markdown-2-html










✨ Render markdown into HTML at build time.





## Features

- 🪜 Support Vite, Rollup, Webpack, esbuild, and more - powered by [`unplugin`](https://github.com/unjs/unplugin)
- 🚀 0-runtime
- 🎃 Rich and customizable built-in rules for rendering markdown
- Built-in code highlight - powered by [Shiki](https://github.com/shikijs/shiki)
- Built-in support for table-of-contents - tagged with `[TOC]`
- Built-in support for YAML front matter - tagged with `---`
- Built-in support for anchors of heading

## Install

```bash
npm i unplugin-markdown-2-html
```

Vite

```ts
// vite.config.ts
import UnpluginMarkdown2Html from 'unplugin-markdown-2-html/vite'

export default defineConfig({
plugins: [
UnpluginMarkdown2Html({ /* options */ }),
],
})
```

Example: [`playground/`](./playground/)


Rollup

```ts
// rollup.config.js
import UnpluginMarkdown2Html from 'unplugin-markdown-2-html/rollup'

export default {
plugins: [
UnpluginMarkdown2Html({ /* options */ }),
],
}
```


Webpack

```ts
// webpack.config.js
module.exports = {
/* ... */
plugins: [
require('unplugin-markdown-2-html/webpack')({ /* options */ })
]
}
```


Nuxt

```ts
// nuxt.config.js
export default {
buildModules: [
['unplugin-markdown-2-html/nuxt', { /* options */ }],
],
}
```

> This module works for both Nuxt 2 and [Nuxt Vite](https://github.com/nuxt/vite)


Vue CLI

```ts
// vue.config.js
module.exports = {
configureWebpack: {
plugins: [
require('unplugin-markdown-2-html/webpack')({ /* options */ }),
],
},
}
```


esbuild

```ts
// esbuild.config.js
import { build } from 'esbuild'
import UnpluginMarkdown2Html from 'unplugin-markdown-2-html/esbuild'

build({
plugins: [UnpluginMarkdown2Html()],
})
```


## Usage

`hello.md` for example


---
title: Hello Makrdown
likes: 100
---

# h1

```ts
export interface Person {
name: string
}
```

# h2

Paragraph goes here.

✨ Directly import from the markdown file
```ts
import { html, toc, meta, markdown } from './hello.md'

console.log(html, toc, meta, markdown)

/* `html` 👇 */

//


# h1


//
export interface Person {

// name: string
// }
//

//


# h2


//

Paragraph goes here.

/* `toc` 👇 */

//

/* `meta` 👇 */

// {
// "title": "Hello Makrdown",
// "likes": 100
// }

/* `markdown`(same with raw file content) 👇 */

// ---
// title: Hello Makrdown
// likes: 100
// ---
//
// # h1
//
// ```ts
// export interface Person {
// name: string
// }
// ```
//
// # h2
//
// Paragraph goes here.
```

### Options

| Prop | Type | Required | Default | Description |
|----------|--------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------|
| markdown | object | ❎ | `{ html: true }` | How markdown is rendered. See [MarkdownItOptions](https://github.com/markdown-it/markdown-it#init-with-presets-and-options) |
| toc | object | ❎ | `{ listType: 'ul' }` | How table-of-contents is rendered. See [TocOptions](https://github.com/nagaozen/markdown-it-toc-done-right#options) |
| anchor | object | ❎ | - | How anchors of heading is rendered. See [AnchorOptions](https://github.com/valeriangalliat/markdown-it-anchor#usage) |
| highlight | object | ❎ | `{ theme: 'vitesse-dark' }` | How code block is highlighted. See [Highlight Code](#highlight-code) |

### Typescript Support

💪🏻 Want ts-hint when importing markdown files? Add `unplugin-markdown-2-html/markdown` to `tsconfig.json` would make world peace :)

```json
{
"compilerOptions": {
"types": [ "unplugin-markdown-2-html/markdown" ],
},
}
```

### Highlight Code

#### Themes for Code Highlighting(Shiki)

Use the built-in themes of Shiki, or **any theme** you like in the VS Code theme market.

- [Built-in themes](https://github.com/shikijs/shiki/blob/main/docs/themes.md): `'css-variables' | 'dark-plus' | 'dracula-soft' | 'dracula' | 'github-dark-dimmed' | 'github-dark' | 'github-light' | 'hc_light' | 'light-plus' | 'material-theme-darker' | 'material-theme-lighter' | 'material-theme-ocean' | 'material-theme-palenight' | 'material-theme' | 'min-dark' | 'min-light' | 'monokai' | 'nord' | 'one-dark-pro' | 'poimandres' | 'rose-pine-dawn' | 'rose-pine-moon' | 'rose-pine' | 'slack-dark' | 'slack-ochin' | 'solarized-dark' | 'solarized-light' | 'vitesse-dark' | 'vitesse-light'`

- Themes from VS Code Market: `..`.

For example: The [Gentle Clean](https://marketplace.visualstudio.com/items?itemName=kricsleo.gentle-clean) theme provides two sets of theme options: `Gentle Clean Vitesse` and `Gentle Clean Monokai`.

So for option `Gentle Clean Vitesse`, the theme configuration would be `kricsleo.gentle-clean.Gentle Clean Vitesse`. For option `Gentle Clean Monokai`, the theme configuration would be `kricsleo.gentle-clean.Gentle Clean Monokai`. Remote themes are downloaded automaticly.

The '<publisher>.<extId>'

## License

[MIT](./LICENSE) License © 2023 [Kricsleo](https://github.com/kricsleo)