프로젝트 내에서 잘못된 파일 URL을 찾으십시오.

4624 단어
URL-fi은 파일에 잘못된 URL이 있는지 테스트해야 할 때 정말 훌륭하고 사용하기 쉽습니다. 그러나 테스트할 파일에 대한 명령 옵션만 지원했습니다. 대부분의 경우 HTML 파일에서 잘못된 URL을 찾으려고 할 때 프로젝트에 수많은 HTML 파일이 있었습니다. 그래서 저는 "하나의 인수 옵션이 있는 프로젝트에서 재귀적으로 테스트하지 않는 이유는 무엇입니까?"라고 생각했습니다.

시작



전체 URL-FI는 hyunjiLeeTech으로 작성되었습니다. 그래서 이 프로젝트에 기여하기 전에 먼저 이 아이디어를 제안하는 게시물issue을 게시했으며 Slack에서 작업하고 싶습니다. 다행히 그녀는 "앞으로!"라고 대답했습니다.

디렉토리에서 파일을 찾으십시오!



디렉토리에서 파일을 찾으려면 파일이 폴더인지 아닌지를 알아야 합니다.
그래서 fs.readdirSync(path, { encoding: "utf-8",withFileTypes:true }) 를 사용했습니다. 이것은 DIRENT 클래스를 반환했습니다. 클래스 내부에는 파일의 이름과 유형이 있습니다(1은 폴더가 아니고 2는 폴더). JS에서 파일을 필터링하는 가장 좋은 방법은 ... 물론 필터를 사용하는 것입니다!

        files = files.filter(file=>{
            return !file.isDirectory()
        });   

그럼 잘못된 URL을 찾아봅시다!

files.map(file=>{
            let content = 0;
            try {
                content = fs.readFileSync(`${path}/${file.name}`, {encoding: "utf-8"})
            } catch (error) {
                console.log(colors.yellow(`${error}`));
            }
            let links = content.match(regex);
            for (let i = 0; links && i < links.length; i++) {
                let link = links[i];
                if (link.startsWith("https://")) {
                    checkUrl(link);
                } else {
                    checkUrl(link);
                    if (sFlag) {
                        checkUrl(link.replace(/^http/, "https"));
                    }
                }
            }
        })

-r 옵션을 추가하고 f



다음 코드와 같이 이 프로그램은 세 가지 옵션만 지원합니다. https 테스트의 경우 s, h, v, 도움말 메시지 및 버전 각각.

        if (arg.includes("s")) {
            ...
        }
        if (arg.includes("h")) {
            ...
        }

        if (arg.includes("v")) {
            ...
        }

코드 바로 아래에 '재귀적으로'를 의미하는 r 옵션을 추가했습니다.

        if (arg.includes("r")) {
            findFilesInDir(process.argv[3])
        }

일부 문제 수정



모든 코드를 구현한 후 변경 사항을 커밋했지만 다음과 같은 문제가 있었습니다.

1. 이전 코드에서 사용자가 동시에 여러 인수를 입력할 수 있도록 했습니다(예: url-fi -hvs test.html). 그러나 내가 당신의 코드를 사용할 때, 이것은 이것을 허용하지 않습니다(예를 들어, url-fi -hs test.html). 이것을 확인해 주시겠습니까?
2. 파일(디렉토리가 아님)과 함께 -r 인수를 사용하면 오류가 발생합니다(ENOTDIR: 디렉토리가 아님, scandir 'test.html). 오류가 아닌 메시지를 인쇄하도록 할 수 있습니까?

그래서 나는 변했다

        if (arg.includes("r")) {
            findFilesInDir(process.argv[3])
        }

에게

        if (arg.includes("r")) {
            rFlag = true;
            findFilesInDir(process.argv[3])
        }

그리고 try 및 catch 블록을 추가하십시오.
따라서 전체 findFilesInDir은 다음과 같습니다.

try {
        let files = fs.readdirSync(path, { encoding: "utf-8",withFileTypes:true })

        files = files.filter(file=>{
            return !file.isDirectory() && !file.name.endsWith('.js')
        });   

        files.map(file=>{
            let content = 0;
            try {
                content = fs.readFileSync(`${path}/${file.name}`, {encoding: "utf-8"})
            } catch (error) {
                console.log(colors.yellow(`${error}`));
            }
            let links = content.match(regex);
            for (let i = 0; links && i < links.length; i++) {
                let link = links[i];
                if (link.startsWith("https://")) {
                    checkUrl(link);
                } else {
                    checkUrl(link);
                    if (sFlag) {
                        checkUrl(link.replace(/^http/, "https"));
                    }
                }
            }
        })
    } catch (error) {
        console.log(colors.yellow(`${error}`));
    }

더 많은 기여



이 작은 프로젝트PR에 참여하고 무엇이든 발행하십시오!

좋은 웹페이지 즐겨찾기