惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
博客园 - 【当耐特】
量子位
C
Check Point Blog
博客园 - 叶小钗
博客园 - 聂微东
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
The Cloudflare Blog
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
月光博客
月光博客
V
V2EX
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

The Tracks of mulder21c

Atomic Design + Storybook 적용 후기 json-server에 사용자 인증 구현하기 개발환경 WSL2 + zsh로 갈아타기 pass function as props in vue 2020년 회고 colum flexbox에서 padding bottom 문제 해결 Nuxt를 통해 보는 프론트엔드 개발자가 하는 일 Nuxt Router kebab-case 처리 JS to SCSS 변환 Nuxt + Storybook 통합 하기 2020 이직 이야기 2020 이직 이야기 2020 이직 이야기 2020 이직 이야기 Windows에서 PM2 실행 오류 해결 오픈톡 정지에 대한 카카오톡 고객센터 후기 배려에 대한 단상 학습이 잘 되지 않는 이유 웹팩 4 마이그레이션 삽질기 babel 7 업데이트 후 node_modules 패키지가 변환되지 않는다면? white space는 4px이다? 정말? 2020년 시간 관리를 위해서 도입 한 툴들 Codility Lesson 5 — PassingCars 2019년 회고 Codility Lesson 4 — MissingInteger Codility Lesson 4 — MaxCounters Codility Lesson 4 — FrogRiverOne Codility Lesson — PermCheck 착각은 자유가 아닌각 세미나 진행 후기 Codility Lesson 3 — tapeEquilibrium
깃북 파일 저장 시 오류 문제 해결
멀더끙 · 2019-02-07 · via The Tracks of mulder21c

한 동안 잘 사용하지 않다가 근래 다시 gitbook toolchain을 사용하고 있는데, gitbook toolchain이 가지고 있는 고질적인 문제가 있었다.

gitbook serve 명령을 통해 로컬 서버를 띄운 상태에서 내용을 작성하고 파일을 저장하면, 자동으로 re-generate하고 새로고침 하게 되는데 이 과정에서 오류가 발생하면서 서버가 죽어버린다.

처음엔 내가 뭘 잘못한건가 싶어서 여기저기 검색을 하고 다녔는데 알고보니 나만 이런게 아니더라는... 1

첫 번째 수정

무튼, 여차저차해서 처음 찾아낸 해결 방법은 로컬 서버를 띄운 뒤 _book/ 디렉토리를 삭제하는 거였다.

$ gitbook serve

$ rm -rf ./_book

어떤 이유에서인지는 모르겠지만 rm 명령을 주어도 실제로 파일이 삭제되지는 않고, 해당 이슈를 해결되었다.
하지만 로컬 서버를 띄울 때 마다 이 짓을 하려니 여간 귀찮은게 아니더라.

결국 근본적인 해결책을 찾으러 출발...

온갖 파일들을 뒤져보고 github issue들을 뒤져보고 나서야 해결책을 찾을 수 있었다.

내용이 너무 길어질듯 해서 github issue로 가보면 남겨진 코드가 있...

두 번째 수정

는 개뿔... 실패했다... (기존에 올려둔 코드가 있는데 간헐적으로 여전히 죽는 문제가 발견되었다. )

다시 해결책을 찾으러 긴긴 여행을... 가려다 다른 방법으로 해결책을 찾았다.

아예 npm script로 rm -rf ./_book을 실행되게 하면 될 것 아닌가?

해서 아예 Windows에서도 문제 없도록 rimraf를 설치하고 npm script로 gitbook serverimraf -rf ./_book를 모두 실행하도록 변경했다.

$ npm install --save-dev rimraf

package.json에서

{
  ...
  "scripts": {
    "preinstall": "(npm list gitbook-cli -g || npm install -g gitbook-cli) && (npm list rimraf -g || npm install rimraf -g)",
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "gitbook serve || rimraf -rf ./_book"
  },
  ...
}

이렇게 수정한 후,

$ npm start로 gitbook을 실행하니 이젠 아무 문제 없이 잘 된다!!!!

세 번째 수정

는... 역시 개뿔...

이게 노트북에서는 되는데 집 컴퓨터에서는 또 안되더라...

아무리 머리를 굴려봐도 안되는 이유는 결국 rimraf -rf ./_book의 실행 시점의 문제인듯 했다. 결국 안정적으로 _book 이 생성된 이후 해당 코드를 실행시키려면 병렬로 명령을 주되, 생성 시간 만큼 기다려주어야 하는 문제를 해결해야 했다.

일단 병렬로 NPM Script를 구동시키기 위해 'npm-run-all'을, 일정 시간 딜레이를 주기 위해 'delay-cli'를 사용해 보기로 했다.

$ npm install --save-dev npm-run-all delay-cli

그리고 병렬 구동을 위해 NPM script를 다시 수정...

gitbook servedelay 30 && rimraf -rf ./_book를 병렬로 수행시키도록 했고, 30초 딜레이를 준 것은 초기 generating에 걸리는 시간이 있어서 30초 정도로 우선 설정을 해두었다.

{
  ...
  "scripts": {
    "preinstall": "(npm list gitbook-cli -g || npm install -g gitbook-cli) && (npm list rimraf -g || npm install rimraf -g)",
    "test": "echo \"Error: no test specified\" && exit 1",
    "serve": "gitbook serve",
    "fixrefresh": "delay 30 && rimraf -rf ./_book",
    "start": "run-p serve fixrefresh "
  },
  ...
}

더불어 npm list rimraf -g 이 코드는 의도했던 것과 달리 0 depth로 설치된 것을 확인해주지 못해서 올바르게 돌아가지 못하고 있었던걸 나중에서야 발견...

다시 구글링을 통해 찾아보니 grep 말고는 답이 없겠더라...
해당 코드를 npm list --global --depth=0 rimraf | grep rimraf로 바꾸어서 보니 이젠 잘 확인이 되어서 원하는 결과로 이어지기 시작했다.

{
  ...
  "scripts": {
    "preinstall": "(npm list gitbook-cli -g || npm install -g gitbook-cli) && (npm list --global --depth=0 rimraf | grep rimraf || npm install rimraf -g)",
    "test": "echo \"Error: no test specified\" && exit 1",
    "serve": "gitbook serve",
    "fixrefresh": "delay 30 && rimraf -rf ./_book",
    "start": "run-p serve fixrefresh "
  },
  ...
}

이렇게 수정을 해 두고 나니 이제는 아무 문제없이 잘 되는 듯 했다.
수정하고 거의 보름 가까이를 gitbook 콘텐츠를 수정하면서 테스트 해봤는데 아직까지 아무 문제 없이 원하는 대로 잘 갱신이 이루어지고 있다.

해결 코드를 PR로 열까 했는데, Gitbook에서 CLI에 대해 공식적으로 deprecation 선언을 해버린 상황이라2 PR을 여는게 의미가 있을까 싶어 그냥 두고 issue에만 코멘트로 남겨두었다.