findBreakURL CLI 프로그램에 새로운 기능 추가

4817 단어

시작하기



findBreakURL은 파일에서 잘못된 URL을 찾을 수 있도록 지원하는 훌륭한 CLI 프로그램입니다. 명령은 매우 간단하고 강력합니다! 그러나 프로그램이 여전히 개선되어야 함을 인정해야 했습니다. 그래서 이번에는 좀 더 흥미로운 기능을 프로그램에 추가했습니다.

어떤 기능이 추가되었는지


  • Added a -j, --json, and/or \j flag, which causes the program to output JSON.

  • 요즘 AJAX는 말 그대로 어디에나 있습니다! CLI 프로그램이 의미 없는 txt 파일 대신 JSON을 반환하면 어떻게 될까요? 다른 웹 앱의 잘못된 URL을 찾는 데 매우 유용한 도구입니다. 그렇게 하려면 JSON 출력이 다음과 같아야 합니다.

    [ 
      { url: 'https://www.google.com': status '200' },
      { url: 'https://bad-link.com': status: '404' } 
    ]
    

  • Supported --all, --good, and --bad flags. The --all flag is the default

  • 또한 대부분의 경우 나쁜 URL이나 좋은 URL만 있으면 됩니다. 둘 다 필요하지 않습니다. 따라서 좋은 URL이나 나쁜 URL만 표시합니다. --good 플래그를 사용하면 좋은 URL만 표시됩니다. --bad 플래그를 사용하면 잘못된 URL만 표시됩니다.

    코딩 타임! -첫 번째-



    첫 번째 기능을 시작하겠습니다. 우선, 새로운 인수 옵션이 필요합니다! yargs npm 덕분에 이것은 매우 쉽습니다. .alias("j", "json") , .describe("j", "Display all results as JSON format") .

    그런 다음 -j 플래그가 참인지 거짓인지 확인해야 합니다. JSON.stringfy() 로 가는 것이 사실입니다.

    arg = yargs.argv;
    // ...
    if (arg.j) {
          await jsonFetch(url);
        } else {
          await fetchFunction(url, file);
        }
    }
    

    내부jsonFetch(url)
    try {
        const response = await axios.head(url);
        // ...
          const httpObj = {
            url,
            status: response.status,
          };
          console.log(chalk.green(JSON.stringify(httpObj)));
        // ...
      } catch (error) {
        // ...
            const httpObj = {
              // ...
            };
            console.log(chalk.yellow(JSON.stringify(httpObj)));
          } 
        // ...
      }
    

    After commit this change.

    코딩 타임! -초-



    이제 두 번째 기능을 수행해 보겠습니다. -j 플래그와 동일하게 "yargs"npm에서 이점을 얻을 수 있습니다.

    그 후에는 비교적 간단합니다. 출력을 표시하기 전에 조건을 추가하기만 하면 됩니다! if (!arg.b) 또는 if (!arg.g) . 플래그가 존재하거나 그 반대의 경우 true를 반환합니다.
    jsonFecth(url) 기능은 다음과 같습니다.

    // ...
    if (!arg.b) {
          const httpObj = {
            url,
            status: response.status,
          };
          console.log(chalk.green(JSON.stringify(httpObj)));
        }
    
    //...
    if (!arg.g) {
          // If 404 error :
          if (error.response) {
            const httpObj = {
              url,
              status: error.response.status,
            };
            console.log(chalk.yellow(JSON.stringify(httpObj)));
          } else {
            const httpObj = {
              url,
              error: error.code,
            };
            console.log(chalk.red(JSON.stringify(httpObj)));
          }
        }
    // ...
    

    그리고, 노멀fetchFunction(url,file)
    // ...
    if (!arg.b) {
          if (response.status === 301) {
            chalk.black.bgYellow(
              console.log(
                "In " +
                  file +
                  " file, the URL: " +
                  url +
                  ". Status code: 301, Moved Permanently to: " +
                  response.headers[`Location`]
              )
            );
          // ...
    if (!arg.g) {
          // If 404 error :
          if (error.response) {
            console.log(
              chalk.white.bgRed.bold(
                "In " + file + " file, the URL: " + url + " is a bad url: "
              )
            );
          //...
    

    After commit this change.

    결론



    두 가지 다른 지점인 issue-7과 issue-8을 사용했기 때문입니다. 병합하는 과정에서 일부 부품을 수동으로 다시 코딩해야 했습니다. 예를 들어, 나중에 코드에서 -g -b 플래그를 추가하고 일부 변수 이름을 다르게 변경했습니다... 이 사소한 서투르고 정리되지 않은 것이 결국 나를 귀찮게 했습니다. 따라서 three-way recursive 병합을 수행하는 경우 이를 인지하고 작은 세부 사항에 완전히 주의하십시오.

    자세한 내용은 myGithub에서 확인할 수 있습니다!

    기여



    나는 항상 당신의 기여를 환영합니다! 언제든지 내 github를 방문하십시오.

    좋은 웹페이지 즐겨찾기