블로그삽질기 2 : 디펜던시 에러 및 마크다운 수식 에러

문제상황 : 잘 되던 hexo server가 갑자기 draft폴더의 여러 글들을 수정하던 중 렌더링이 안 됨.

세부 내용

draft의 글과 about의 글 들을 동시다발적으로 수정하던 도중 갑자기 hexo server가 돌아가지 않는 에러 발생
며칠 동안 해결이 안 됨

에러 해결 과정 intro

  • 처음 에러 메세지가 길었는데 그 중 critical해 보였던 것은 빨갛게 떴던 expected variable end 에러.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Unhandled rejection Template render error: (unknown path) [Line 13, Column 38]
    expected variable end
    at Object._prettifyError (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\lib.js:36:11)
    at Template.render (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:526:21)
    at Environment.renderString (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:364:17)
    at Promise.fromCallback.cb (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\extend\tag.js:62:48)
    at tryCatcher (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\util.js:16:23)
    at Function.Promise.fromNode.Promise.fromCallback (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\promise.js:180:30)
    at Tag.render (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\extend\tag.js:62:18)
    at Object.onRenderEnd (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\hexo\post.js:282:20)
    at Promise.then.then.result (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\hexo\render.js:65:19)
    at tryCatcher
    ...

가설 1 : draft와 about의 글을 수정하다가 발생한 에러여서 하필 동시에 수정하니 글에 문제가 있을 것이다.

  • _drafts 와 _posts를 다 날리고 테스트 해보니 에러가 바뀜
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Template render error: (unknown path) [Line 8, Column 23]
    Error: Unable to call `the return value of (posts["first"])["updated"]["toISOString"]`, which is undefined or falsey
    at Object._prettifyError (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\lib.js:36:11)
    at C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:551:19
    at Template.root [as rootRenderFunc] (eval at _compile (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:621:18), <anonymous>:214:3)
    at Template.render (C:\Users\Hayeon\dev\gitblog-source\node_modules\nunjucks\src\environment.js:540:10)
    at Hexo.module.exports (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo-generator-feed\lib\generator.js:40:22)
    at Hexo.tryCatcher (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\util.js:16:23)
    at Hexo.<anonymous> (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\method.js:15:34)
    at Promise.map.key (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\hexo\index.js:344:26)
    ...

가설 2 : 필요 없는 플러그인

  • hexo-generator-feed 깃헙에 가보니 이것을 돌리기 위한 설정이 누락
  • 그런데 원래 이 설정 없이도 됐었다!
  • 이 테마를 돌리기 위해 이 플러그인이 필요 없는 것 같음.
  • 그냥 지웠더니 잘 돌아감
  • 그런데 간헐적으로 webpack 에러 발생
1
2
3
4
5
6
7
8
9
10
Error: Cannot find module 'C:\Users\Hayeon\dev\gitblog-source\webpack.config.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\hexo\index.js:227:21)
at Hexo.renderer (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo-renderer-webpack-2-advanced\index.js:13:27)
at Hexo.tryCatcher (C:\Users\Hayeon\dev\gitblog-source\node_modules\bluebird\js\release\util.js:16:23)
at Hexo.ret (eval at makeNodePromisifiedEval (C:\Users\Hayeon\AppData\Roaming\nvm\v10.15.0\node_modules\hexo-cli\node_modules\bluebird\js\release\promisify.js:184:12), <anonymous>:13:39)
at Promise.then.text (C:\Users\Hayeon\dev\gitblog-source\node_modules\hexo\lib\hexo\render.js:61:21)
...
  • 그래서 hexo-renderer-webpack-2 이것도 지움
  • 그랬더니 잘 돌아감!
  • 다시 drafts, posts글들 복원하고 돌렸더니 원래뜨던 env에러 다시 뜸 (주륵..)

가설 3 : 수식 작성 문제

  • 드래프트 다시 다 날리고 글 하나씩 복원하다 보니 한 포스팅이 걸림 (posts도 아니고 drafts였는데)
  • 뭐가 에러인지 찾아보다 보니 특이한 점이 그 글은 수식을 많이 포함한 글이었다.
  • 수식을 날려보니 돌아간다! - 수식에러로 판명
  • 수식 하나씩 지우고 테스트 해보니 중괄호 두 개를 겹쳐쓰는 부분에서 \{\{ 이렇게 붙어있으면 에러. \{ \{로 띄어쓰기를 넣고 바꿔주니 잘 돌아갔다. (부들부들)

수식 에러 이전의 삭제한 디펜던시들은 무엇일까?

  • 이전에 디버깅하며 npm install을 했었다
  • 기존 노트북에서 소스 옮겨오는 과정에서 문제가 생긴 것 같다 (또..)
  • 저 두 generator는 예전 테마에서 쓰던 것들이어서 package.json에는 남아있었는데.. 예전에 여차저차 지우고 잘 돌았었던 듯.
  • 그런데 이번에 npm install 하면서 다시 되살아났고, 관련 설정이 누락되어 에러 발생한 것으로 추측.

결론

  1. 수식 쓸 때 백슬래시 들어간 건 왠만하면 띄어쓰기 잘 지키자. (latex에선 잘 돌았는데 markdown 렌더러가 미세하게 차이가 있는 듯)
  2. 디펜던시 관리를 잘 하자.
  3. draft/posts 수정할 때 에러 메세지 잘 보면서, 글 한번에 하나씩만 작성하자.