node 환경에서 showdown.js makeMarkdown 메서드 사용하기

vhv3y8·2024년 1월 20일
0

세팅

node에서 showdown 라이브러리를 설치해서 사용

$ npm i showdown

문제 상황

makeMarkdown 메서드를 쓰면 window is not defined라고 에러가 뜬다.

.../node_modules/showdown/dist/showdown.js:2549
      if (window && window.document) {
      ^

ReferenceError: window is not defined
if (!HTMLParser) {
  if (window && window.document) {
    HTMLParser = window.document
  } else {
    throw new Error(
      `HTMLParser is undefined. 
       If in a webworker or nodejs environment,
       you need to provide a WHATWG DOM and HTML such as JSDOM`
    )
  }
}

에러 부분의 코드를 보면 이런 식으로 되어 있는데, node에서는 window, window.document가 모두 없기 때문인듯하다.

HTMLParsermakeMarkdown 메서드의 두 번째 파라미터다.

해결 방법

에러 메시지가 알려주는대로 JSDOM을 사용하자.

globalThis.window에 바인딩 해주자.

$ npm i jsdom
import showdown from "showdown"
import { JSDOM } from "jsdom"

globalThis.window = new JSDOM().window

const converter = new showdown.Converter()
console.log(converter.makeMarkdown(`<h2>hi from html</h2>`))
## hi from html
profile
개발 기록, 미래의 나에게 설명하기

0개의 댓글