Skip to navigation
2-3 minutes read

@mdx-js/register

Node hook to require MDX.

🪦 Legacy: This package is not recommended for use as it depends on deprecated Node features.

Contents

What is this?

This package is a Node CommonJS hook to support MDX. require.extensions is a deprecated feature in Node which lets projects “hijack” require calls to do fancy things, in this case it let’s you require MD(X) files.

When should I use this?

This integration is useful if you’re using Node, for some reason have to use CJS, and want to require MDX files from the file system.

At this point in time, you’re better off with @mdx-js/node-loader, even though it uses an experimental Node API.

Install

This package is ESM only: Node 12+ is needed to use it.

npm:

Shell
npm install @mdx-js/register

yarn:

Shell
yarn add @mdx-js/register

Use

Say we have an MDX document, example.mdx:

MDX
export const Thing = () => <>World!</>

# Hello, <Thing />

…and our module example.cjs looks as follows:

JavaScript
'use strict'

const React = require('react')
const {renderToStaticMarkup} = require('react-dom/server')
const Content = require('./example.mdx')

console.log(renderToStaticMarkup(React.createElement(Content)))

…then running that with:

Shell
node -r @mdx-js/register example.cjs

…yields:

HTML
<h1>Hello, World!</h1>

API

🪦 Legacy: This package is not recommended for use as it depends on deprecated Node features.

This package does not export anything. It changes Node’s internals.

To pass options, you can make your own hook, such as this my-hook.cjs:

JavaScript
'use strict'

const register = require('@mdx-js/register/lib/index.cjs')

register({/* Options… */})

Which can then be used with node -r ./my-hook.cjs.

The register hook uses evaluateSync. That means import (and export … from) are not supported when requiring .mdx files.

Types

This package is not typed as TypeScript seems to not support .cjs files yet.

Security

See § Security on our website for information.

Contribute

See § Contribute on our website for ways to get started. See § Support for ways to get help.

This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.

License

MIT © Titus Wormer