Comments (3)
I'm using gatsby-remark-images
to get Gatsby's image optimization functionality for images I use in .mdx
files. I don't really know if there's a way to achieve this in Gatsby without using gatsby-remark-images
...
Is there something in particular that you’re looking for, and I can help with?
rehype-raw is exactly what I was looking for, thanks! It worked wonderfully, though I did have to add a number of passThroughs (is this intended?):
[
rehypeRaw,
{
passThrough: [
'mdxjsEsm',
'mdxFlowExpression',
'mdxTextExpression',
'mdxJsxFlowElement',
'mdxJsxTextElement',
],
},
],
from xdm.
Yup indeed, those have to be passed through!
I added support for this in 81d0fbb. Meant to document it, but also wanted to learn more about what users need for this case, the docs are already verbose, not yet sure how to document it!
from xdm.
[…] I've just about finished migrating my Gatsby site to use xdm instead of gatsby-plugin-mdx, and I've seen some significant build time improvements as a result!
That’s awesome! Could you share what worked for you in the other issue? (#40) I’m sure someone else will stumble on it too, and I’m also interested to hear what worked.
Also, should the README specify that the MDAST of mdx and xdm are not the same?
xdm is a) things slated for mdx-js/mdx 2, b) more new things. The changes in the AST, including this problem specifically, are also part of the latest mdx-js/mdx 2 beta.
The goal is for how MDX is parsed and the AST to be exactly the same. I’ve refrained from documenting the AST in xdm to allow for some potential future changes, but you can see the nodes in the underlying projects: expressions, jsx, esm.
Is there a recommended way to migrate remark plugins (like gatsby-remark-image) that use type: html or type: jsx
html
nodes are something that work for markdown. If you’re going markdown -> html, those values can be passed through untouched. But, say you’re going to React, it doesn’t work that nicely — you’d need a full blown HTML parser (importantly, say you have the HTML <h1>
, then the markdown ## heading
, and finally </h1>
: then the h1 is closed before ##
, and the final </h1>
is ignored)
You can do this with xdm: rehype-raw
It’ll work well, but it’s not great for bundle size and performance.
jsx
nodes were in mdx-js/mdx@1. The equivalent for html
, but a slightly different syntax.
Since about 6 years now, a different, and much better way for defining how things look like in HTML, was supported in remark.
Which is also supported in markdown and MDX in Gatsby: their plugins just never used it.
Here is an example of how to define what things turn into when going from markdown html.
My suggestion generally would be
a) never use 'html'
or 'jsx'
in mdast/mdxast, use the h* fields
b) move more things to remark plugins, so they can be used by Next (or other frameworks) folks too
c) do more with rehype plugins (see the Architecture section in the readme)
I hacked together a solution that used another remark plugin to convert nodes of type: html into a custom JSX component that renders the raw HTML, but I'm unsure if this is the best approach.
To come back to this particular question: are you using all of gatsby-remark-image? Is there something in particular that you’re looking for, and I can help with?
from xdm.
Related Issues (20)
- Can't override imported descendant components HOT 2
- What to do if a remark plugin generates HTML nodes? HOT 4
- How to get tree from compile ? HOT 4
- `defaultComponents` configuration prop
- Replace `got` with alternative that doesn't depend on `@types/node`
- Node loader should pass actual URL object instead of file-URL-as-string to `vfile`
- Vue Router calls generated MDXContent function without props parameter, causing TypeError
- Importing xdm on Next.js results in Webpack fail: reading from "node:assert" is not handled by plugins HOT 10
- Using MDXProvider for evaluate, options.useMDXComponents HOT 3
- question: Can interpolation occur in link urls and references? HOT 2
- Code blocks inside components are processed incorrectly. HOT 3
- How to make XDM handle type = 'html' MDAST nodes? HOT 4
- Pass components prop to Next page HOT 3
- Performance issues in a live editor using evaluate HOT 5
- Question: What is the roadmap for XDM and how does it relate to MDX 2? HOT 2
- Allow `options.pragmaImportSource` to work with named exports. HOT 11
- Pass VFile Data Back HOT 16
- Question: are there plans to start releasing recma libraries? HOT 17
- Weird use of paragraph tag inside a header HOT 4
- Adding a mdxJsxAttributeValueExpression to a JSX Node has no effect HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from xdm.