Glob 및 .gitignore 테스터
경로 목록에 glob 패턴과 .gitignore 규칙을 시험해 어떤 경로가 어떤 규칙으로 일치하는지 확인합니다.
코드 예제
내 프로젝트에 그대로 복사해서 쓰세요. 모든 예제는 해당 언어의 표준 라이브러리만 사용하므로 설치할 것이 없습니다.
const pattern = '*.log'
const names = ['app.log', 'readme.md', 'error.log']
// * stays inside one path segment, ? is one character, everything else is literal.
const source = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '[^/]*').replace(/\?/g, '[^/]')
const matcher = new RegExp(`^${source}$`)
for (const name of names.filter((candidate) => matcher.test(candidate))) {
console.log(name)
}기능
경로 목록에 glob 패턴과 .gitignore 규칙을 시험합니다. 각 경로에 일치 여부와 원인이 된 패턴이 함께 표시되어, src/lib/util.test.ts가 포함되거나 제외되는 이유를 알 수 있습니다.
사용 방법
- 경로에 한 줄에 경로 하나씩 붙여 넣거나 텍스트 파일을 놓습니다.
- 패턴에 한 줄에 패턴 하나씩 씁니다.
#로 시작하는 줄은 주석입니다. - Glob, Bash, Gitignore를 고르고 모든 경로, 일치만, 불일치만 표시합니다.
- 결과를 복사합니다.
예시
패턴 src/**/*.ts와 !**/*.test.ts에서 경로 src/lib/util.ts는 일치하고 src/lib/util.test.ts는 제외가 우선하여 일치하지 않습니다. .gitignore 규칙 *.log와 !keep.log에서는 app.log는 무시되고 keep.log는 무시되지 않습니다.
알아 두면 좋은 점
*는 한 디렉터리 안에 머물고**는 디렉터리를 가로지르며?,[ab],{a,b}는 picomatch처럼 동작합니다..env같은 점 파일은 점 파일 포함을 켜거나 패턴이 점을 명시할 때만 일치합니다.- Glob과 Bash에서
!로 시작하는 패턴은 다른 패턴이 찾은 것을 제외합니다. Gitignore에서는 Git처럼 마지막으로 일치한 규칙이 우선합니다. - Bash는
globstar가 없는 셸처럼**를 일반*로 읽습니다. - 경로는 텍스트로 비교됩니다. 디스크에서 아무것도 읽지 않습니다.
세 가지 구문은 무엇이 다른가요?
Glob은 대부분의 빌드 도구가 쓰는 picomatch 구문입니다. *는 한 디렉터리 안에 머물고 **는 디렉터리를 가로지르며, {a,b} 같은 중괄호, [ab] 같은 문자 클래스, ?도 동작합니다. Bash는 globstar가 없는 셸처럼 **를 일반 *로 읽습니다. Gitignore는 .gitignore 규칙을 따릅니다. 끝의 /는 디렉터리, 앞의 /는 루트 고정을 뜻하며, 뒤의 ! 규칙은 앞선 규칙이 무시한 것을 다시 포함합니다.
자주 묻는 질문
경로 옆에 어떤 규칙이 표시되나요?
처음으로 일치한 패턴입니다. glob과 bash에서 제외(!로 시작하는 패턴)로 빠진 경로에는 그 제외가 표시됩니다. gitignore에서는 그 경로를 무시한 규칙이 표시됩니다.
*가 점으로 시작하는 파일과 일치하지 않는 이유는?
패턴이 점을 명시하지 않으면 glob은 점 파일을 건너뜁니다. 점 파일 포함을 켜면 bash의 dotglob처럼 *와 ?가 일치합니다. .gitignore에는 이 스위치가 없습니다.
이 도구는 경로를 어딘가로 보내나요?
아니요. 모든 작업은 브라우저에서 이루어집니다. 입력한 내용은 우리 서버로 전송되지 않습니다.