본문 바로가기

프론트엔드

gitbook-cli cb.apply error 해결하기

  • 키워드: gitbook, gitbook-cli, graceful-fs, npm, node, nvm, terminal
  • 상황
    1. gitbook 관련 작업을 하시는 동료로부터 gitbook cli에서 알 수 없는 에러가 발생한다는 얘기를 들었다.
    2. 사용해보진 않은 툴이었지만 npm package와 terminal에 익숙하지 않은 분이라 직접 도움을 드리기로 했다.
  • 해결 과정
      1. 먼저 gitbook의 README에 따라 gitbook을 install하고 init 해본다.
          npm install gitbook-cli -g
        gitbook init

        그러면 아래와 같은 에러가 발생한다.
        if (cb) cb.apply(this, arguments)
        TypeError: cb.apply is not a function
        at .../lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:285:20  

      2. 구글에 'gitbook cp.apply graceful-fs error'라고 검색한 후, 검색한 해결법을 실행해본다.
          cd ...example/.nvm/versions/node/v16.13.0/lib/node_modules/gitbook-cli/node_modules/npm/node_modules
        npm install graceful-fs@latest --save
        
        gitbook init
        하지만 gitbook init을 실행하면 새로운 에러가 발생한다.

        TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received an instance of Promise

      3. 해당 에러를 구글링하여 해결법을 찾는다.
        https://www.itcan.cn/2022/03/24/gitbook-init-error/
        현재의 node version(v16)이 너무 높은 것 같아 version 12로 낮춰보기로 한다.
          rm -rf ~/.gitbook 
        nvm use 12
        
        npm install gitbook-cli -g
        
        cd ...example/.nvm/versions/node/v12.22.0/lib/node_modules/gitbook-cli/node_modules/npm/node_modules
        npm install graceful-fs@latest --save
        
        gitbook init
        gitbook init을 실행해도 아무런 동작도 하지 않는다.

      4. 처음과 같이 graceful-fs의 문제일 것이라 추측하고, graceful-fs npm을 살펴보았다.
        https://www.npmjs.com/package/graceful-fs
        최근 몇 달간 version update가 여러차례 있었기 때문에, 답변에 적힌 graceful-fs@latest가 현재에는 적용되지 않을 수도 있다.

        issue의 답변을 더 꼼꼼히 살펴보고 graceful-fs@4.2.0을 사용했다는 유저를 발견했다.
        https://github.com/GitbookIO/gitbook-cli/issues/110#issuecomment-1101327973 

          gitbook init
        gitbook serve
          
        ... 결과 ...
        Live reload server started on port: 35729
        Press CTRL+C to quit ...
        
        info: 7 plugins are installed 
        info: loading plugin "livereload"... OK 
        info: loading plugin "highlight"... OK 
        info: loading plugin "search"... OK 
        info: loading plugin "lunr"... OK 
        info: loading plugin "sharing"... OK 
        info: loading plugin "fontsettings"... OK 
        info: loading plugin "theme-default"... OK 
        info: found 1 pages 
        info: found 0 asset files 
        info: >> generation finished with success in 0.3s ! 
        
        Starting server ...
        Serving book on http://localhost:4000
        이제 gitbook init이 잘 작동한다! gitbook serve까지 실행하여 세팅을 마무리한다.

  • 의의
    1. version 관련 에러가 발생했을 때에는 node version과 npm package의 version을 고려해야한다.
    2. 버그의 해결법을 찾았을 때는 현재에도 적용할 수 있는지 고려해야한다.