I want to be able to easily use custom components in my markdown.
MDX is a build tool that originated in the React community that processes Markdown files so that JSX can be used inline inside of them. This is an indispensable tool for anyone writing about code who wants to show on page examples.
Luckily, Svelte has mdsvex, its own preprocessor that does exactly the same thing.
To set this up, mdsvex
needs to be imported into the rollup.config.js
file.
import { mdsvex } from 'mdsvex'
It then needs to be added to both the client
and server
configuration objects. By default it will process .svx
file, but it can be configured work with any extension, like the more common .md
.
svelte({
extensions: ['.svelte', '.md'],
preprocess = [
mdsvex({ extension: '.md' }
]
})
Lastly, the dev
,build
, and export
commands in package.json
need to be modified to be made aware of these extensions with the --ext
flag when they run.
"dev": "sapper dev --ext '.svelte .md'",
"build": "sapper build --legacy --ext '.svelte .md'",
"export": "sapper export --legacy --ext '.svelte .md'"
Now, components can be imported inside of a <script>
tag, just like any other Svelte page, as used directly inside of markup!
<script>
import Button from './_button.svelte'
</script>
<Button />
Neat!