MDX에 무심코 <3을 쓰면 터진다2023. 5. 29.
<3
은 emoji가 없던 시절 하트를 표시하던 방법이다. 좀 전에 graphite cheatsheet til을 쓰면서 무심코 하트를 <3
으로 했었는데 로컬 빌드가 터져서 음? 하고 보니 당연한 얘기였다.
MDX에게 <
란 jsx
의 시작이기 때문에...
추가:
<>
도 터짐<-
도 터짐
<3
은 emoji가 없던 시절 하트를 표시하던 방법이다. 좀 전에 graphite cheatsheet til을 쓰면서 무심코 하트를 <3
으로 했었는데 로컬 빌드가 터져서 음? 하고 보니 당연한 얘기였다.
MDX에게 <
란 jsx
의 시작이기 때문에...
추가:
<>
도 터짐<-
도 터짐bodyHTML
을 dangerously...
에 넣어주고 있었음.body
(markdown string)을 mdx renderer에 넘겨서 써야겠다고 생각.next/image
를 써야하는데,width
/height
정보를 넘겨줘야함.component
설정시 <img />
-> <Image />
로 replace 하면서 요걸 사용해서 width
/height
정보를 넘겨주면 됨.import probe from "probe-image-size"
// ...
const components: MDXRemoteProps["components"] = {
// ...
// @ts-expect-error <- ts는 아직 async 컴포넌트를 모르지만 우리는 rsc 세계로 넘어왔으므로 ok.
img: async ({ src, alt }) => {
if (!src) return null
const { width, height } = await probe(src ?? "")
// ^^^^^ rsc ftw...
if (!width || !height) return null
return <Image src={src} alt={alt ?? ""} width={width} height={height} />
},
// ...
}
// ...
import probe from "probe-image-size"
// ...
const components: MDXRemoteProps["components"] = {
// ...
// @ts-expect-error <- ts는 아직 async 컴포넌트를 모르지만 우리는 rsc 세계로 넘어왔으므로 ok.
img: async ({ src, alt }) => {
if (!src) return null
const { width, height } = await probe(src ?? "")
// ^^^^^ rsc ftw...
if (!width || !height) return null
return <Image src={src} alt={alt ?? ""} width={width} height={height} />
},
// ...
}
// ...
최종 렌더된 이미지의 url을 보면
next가 잘 처리하고 있음을 알 수 있음.
RSC는 대박이다...