Hugo 를 선택한 이유

위에서 이야기한 Mark down 언어를 지원하는 점은 장점이지만, MD 내에서 HTML 을 직접 사용할 수 없는 제약도 있다. 그래서 두번째 Shortcode 를 지원하는 것 같다.

Shortcode

참고: https://gohugo.io/content-management/shortcodes/

Hugo 에서는 이미 아래와 같은 방법으로 이미지나 Youtube 를 삽입하는 방법을 사용한다.

{ {< figure src="/images/logo.png" title="logo image" >}}
{ {< youtube sGd5-aqsnHo>}}

주의 : 처음 { { 는 {{ 와 같이 붙여써야 한다. (Shortcode 가 실행되지 않도록 하기 위해서 띄어쓰기를 한 것임)

사용자 정의 Shortcode

참고: https://gohugo.io/templates/shortcode-templates/

Template 을 만들고, 블로그 컨텐츠 Markdown 파일에서 이를 가져다 쓰는 형식으로 사용한다.

  1. Template 만들기

    /layouts/shortcodes/golden.html 이라는 Template 파일을 만든다.

<style>
  .reload_button {
    height:30px;
    margin:10px;
    background-color: lightgray;
  }
</style>

<div style="padding:10px; border-style:solid; background-color:#fceeee;">
  <span id="golden" ></span>
  <button class="reload_button" onclick="reload()"> 다른 명언 보기 </button>
</div>

<script>
{{ $goldens := readFile "documents/golden.txt" }}
{{ $strs := split $goldens "\n" }}

var goldens = [
{{ range $str := $strs }}
{{ printf "%s" $str }},
{{ end }}
];
function getRandomInt(max) {
  return Math.floor(Math.random() * Math.floor(max));
}
function reload() {
  var idx = getRandomInt(goldens.length);
  var div_golden = document.getElementById('golden');
  div_golden.innerHTML = goldens[idx];
}
reload()

</script>

Hugo Root 디렉토리 아래 documents 디렉토리를 만들고 golden.txt 파일을 만든다. golden.txt 파일은 텍스트 파일이다. 한줄에 하나씩 보여주고 싶은 글귀를 적는다.

  1. Markdown 에 Shortcoding

    블로그 글 Markdown 에서 아래와 같이 Short code 를 삽입한다.

{ {< golden >}}

짠… 이렇게 나온다.

React App 사용하기

Hugo Markdown 에서 HTML Javascript 를 사용하는 방법에 대해서 알아보았다. React App 도 Short code 를 이용해서 만들 수 있다.

  1. react build 폴더의 경로 정하기

    Hubo 에서 static 폴더는 그대로 루트로 카피된다. 즉 static/monocopter/index.html 은 /monocoptor/index.html 로 변환된다는 뜻이다.

  2. react build 시 경로 집어넣기

    package.json 파일에서 아래 내용을 추가한다.

"homepage": "/monocopter/",
  1. react build

    $ npm build 또는 yarn build

  2. build/static 폴더 내용을 static/monotocoper/static 으로 카피한다.

  3. build/index.html 파일을 /layouts/shortcodes/monocopter.html 로 카피한다.

    그대로 써도 되지만, 불필요한 meta태그는 삭제하는 것도 좋다.

구글링을 해보면 Hugo pipe Babel 을 이용하는 방법이 나오는데, Shortcode 를 이용한 방법이 좀 더 깔끔해 보인다.