SSG에서 `--config` 옵션에 대한 지원 추가

이번 주에 저는 Ririio의 SSG인 ririio-ssg에 기여할 기회를 얻었습니다.

개요


ririo-ssg는 비슷한 요구 사항을 가진 Javascript로 프로그래밍되었다는 점에서 지난 몇 주 동안 함께 작업한 다른 정적 사이트 생성기와 비슷합니다. ririo-ssg.txt.md 파일을 정적 사이트로 변환할 수 있는 훌륭한 CLI 도구입니다. 그러나 이 도구는 .json 형식의 구성 파일과 함께 작동하여 도구의 기본 동작을 재정의할 수 없습니다.

문제 제기



늘 그렇듯이 issue ririo-ssg Github 저장소를 제출하는 것으로 시작했습니다. 소유자는 나에게 문제를 할당하여 신속하게 응답했습니다. 할당 후 SSG가 구성 파일을 처리할 수 있도록 염두에 두었던 구현 작업을 시작했습니다JSON.

코드 작성



코드 작성은 처음에 생각했던 것만큼 어렵지 않았습니다. 코드를 작성하기 위해 새 gitbranch을 생성하여 시작했습니다. 또한 git remote라는 이름의 upstream를 설정하여 원본 저장소와 동기화 상태를 유지했습니다.ririo-ssgcommander 모듈을 사용하여 commands를 처리합니다. 이는 간단합니다. CLI가 인수가 있는 options--config 옵션과 함께 작동할 수 있도록 -C를 업데이트해야 했습니다. JSON 파일의 config 개체를 구문 분석하는 작업은 Javascript에 내장된 JSON.parse 함수가 있어 작업을 수행할 수 있으므로 훨씬 더 쉬웠습니다.

PR 만들기


-C 옵션에 대한 초기 구현으로 PR을 생성했습니다. 소유자로부터 피드백을 받고 이후 커밋에 변경 사항을 반영했습니다.

직면한 도전


  • 저는 여러 파일에 걸쳐 있는 모듈식 코드를 작성하는 습관이 있습니다. 처음에는 JSON 구성 파일로 읽을 새 파일을 만들었습니다. 그러나 그렇게 함으로써 일부 기능에서 몇 가지 문제가 발생했습니다. 코드 소유자와 상의하고 대신 그가 권장하는 방식으로 작업했습니다.
  • 중심 문제는 .env 파일을 읽고 쓰는 것이었습니다. 이것은 SSG가 readFile 모듈에서 writeFilefs와 같은 기능을 활용했기 때문에 문제였습니다. 따라서 .env 또는 -C 옵션을 사용하여 도구를 여러 번 실행하지 않는 한 -config 파일의 일부 값을 덮어쓰지 않습니다. readFile 함수를 readFileSync로, writeFilewriteFileSync로 교체하여 이 문제를 해결할 수 있었습니다. 코드를 동기 함수로 교체하면 모든 변경 사항이 .env 파일에 제대로 반영될 때까지 프로그램 실행이 중단됩니다.

  • 결과



    사용자는 이제 config 또는 JSON 옵션을 사용할 때 유효한 -C 개체가 포함된 --config 파일을 전달할 수 있습니다.
    이 도구에서 허용하는 유효한JSON 개체의 예는 다음과 같습니다.

    {
      "input" : "./text-files",
      "output" : "output-folder",
      "lang" : "uk",
    }
    


    잘못되고 지원되지 않는key-value 쌍은 무시됩니다.

    좋은 웹페이지 즐겨찾기