Skip to content

경로

[안정성: 2 - 안정됨]

안정성: 2 안정성: 2 - 안정됨

소스 코드: lib/path.js

node:path 모듈은 파일 및 디렉토리 경로 작업을 위한 유틸리티를 제공합니다. 다음과 같이 액세스할 수 있습니다.

js
const path = require('node:path')
js
import path from 'node:path'

Windows vs. POSIX

node:path 모듈의 기본 동작은 Node.js 애플리케이션이 실행 중인 운영 체제에 따라 다릅니다. 특히 Windows 운영 체제에서 실행할 때 node:path 모듈은 Windows 스타일 경로가 사용되고 있다고 가정합니다.

따라서 path.basename()을 사용하면 POSIX 및 Windows에서 다른 결과가 나올 수 있습니다.

POSIX에서:

js
path.basename('C:\\temp\\myfile.html')
// 반환 값: 'C:\\temp\\myfile.html'

Windows에서:

js
path.basename('C:\\temp\\myfile.html')
// 반환 값: 'myfile.html'

모든 운영 체제에서 Windows 파일 경로로 작업할 때 일관된 결과를 얻으려면 path.win32를 사용하십시오.

POSIX 및 Windows에서:

js
path.win32.basename('C:\\temp\\myfile.html')
// 반환 값: 'myfile.html'

모든 운영 체제에서 POSIX 파일 경로로 작업할 때 일관된 결과를 얻으려면 path.posix를 사용하십시오.

POSIX 및 Windows에서:

js
path.posix.basename('/tmp/myfile.html')
// 반환 값: 'myfile.html'

Windows Node.js는 드라이브별 작업 디렉토리의 개념을 따릅니다. 이 동작은 백슬래시 없이 드라이브 경로를 사용할 때 관찰할 수 있습니다. 예를 들어 path.resolve('C:\\')path.resolve('C:')와 다른 결과를 반환할 수 있습니다. 자세한 내용은 이 MSDN 페이지를 참조하십시오.

path.basename(path[, suffix])

[기록]

버전변경 사항
v6.0.0path 인수로 문자열이 아닌 값을 전달하면 이제 오류가 발생합니다.
v0.1.25v0.1.25에 추가됨

path.basename() 메서드는 Unix basename 명령과 유사하게 path의 마지막 부분을 반환합니다. 후행 디렉토리 구분자는 무시됩니다.

js
path.basename('/foo/bar/baz/asdf/quux.html')
// 반환 값: 'quux.html'

path.basename('/foo/bar/baz/asdf/quux.html', '.html')
// 반환 값: 'quux'

Windows는 일반적으로 파일 확장자를 포함한 파일 이름을 대소문자를 구분하지 않는 방식으로 처리하지만, 이 함수는 그렇지 않습니다. 예를 들어 C:\\foo.htmlC:\\foo.HTML은 동일한 파일을 참조하지만, basename은 확장자를 대소문자를 구분하는 문자열로 처리합니다.

js
path.win32.basename('C:\\foo.html', '.html')
// 반환 값: 'foo'

path.win32.basename('C:\\foo.HTML', '.html')
// 반환 값: 'foo.HTML'

path가 문자열이 아니거나 suffix가 제공되었고 문자열이 아니면 TypeError가 발생합니다.

path.delimiter

추가된 버전: v0.9.3

플랫폼별 경로 구분 기호를 제공합니다.

  • Windows의 경우 ;
  • POSIX의 경우 :

예를 들어, POSIX에서:

js
console.log(process.env.PATH)
// 출력: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'

process.env.PATH.split(path.delimiter)
// 반환: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']

Windows에서:

js
console.log(process.env.PATH)
// 출력: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'

process.env.PATH.split(path.delimiter)
// 반환: ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']

path.dirname(path)

[기록]

버전변경 사항
v6.0.0이제 path 인수로 문자열이 아닌 값을 전달하면 오류가 발생합니다.
v0.1.16추가된 버전: v0.1.16

path.dirname() 메서드는 Unix dirname 명령어와 유사하게 path의 디렉터리 이름을 반환합니다. 후행 디렉터리 구분 기호는 무시됩니다. path.sep를 참조하세요.

js
path.dirname('/foo/bar/baz/asdf/quux')
// 반환: '/foo/bar/baz/asdf'

path가 문자열이 아니면 TypeError가 발생합니다.

path.extname(path)

[기록]

버전변경 사항
v6.0.0이제 path 인수로 문자열이 아닌 값을 전달하면 오류가 발생합니다.
v0.1.25추가된 버전: v0.1.25

path.extname() 메서드는 path의 마지막 부분에서 마지막으로 나타나는 . (점) 문자부터 문자열 끝까지의 path의 확장자를 반환합니다. path의 마지막 부분에 .가 없거나, path의 기본 이름( path.basename() 참조)의 첫 번째 문자 이외에 . 문자가 없으면 빈 문자열이 반환됩니다.

js
path.extname('index.html')
// 반환: '.html'

path.extname('index.coffee.md')
// 반환: '.md'

path.extname('index.')
// 반환: '.'

path.extname('index')
// 반환: ''

path.extname('.index')
// 반환: ''

path.extname('.index.md')
// 반환: '.md'

path가 문자열이 아니면 TypeError가 발생합니다.

path.format(pathObject)

[History]

버전변경 사항
v19.0.0ext에 점이 지정되지 않은 경우 점이 추가됩니다.
v0.11.15v0.11.15에서 추가되었습니다.

path.format() 메서드는 객체에서 경로 문자열을 반환합니다. 이는 path.parse()의 반대입니다.

pathObject에 속성을 제공할 때, 한 속성이 다른 속성보다 우선순위가 높은 조합이 있다는 것을 기억하십시오:

  • pathObject.dir이 제공된 경우 pathObject.root는 무시됩니다.
  • pathObject.base가 존재하는 경우 pathObject.extpathObject.name은 무시됩니다.

예를 들어, POSIX에서:

js
// `dir`, `root` 및 `base`가 제공된 경우,
// `${dir}${path.sep}${base}`
// 가 반환됩니다. `root`는 무시됩니다.
path.format({
  root: '/ignored',
  dir: '/home/user/dir',
  base: 'file.txt',
})
// 반환 값: '/home/user/dir/file.txt'

// `dir`이 지정되지 않은 경우 `root`가 사용됩니다.
// `root`만 제공되거나 `dir`이 `root`와 같은 경우 플랫폼 구분자는 포함되지 않습니다. `ext`는 무시됩니다.
path.format({
  root: '/',
  base: 'file.txt',
  ext: 'ignored',
})
// 반환 값: '/file.txt'

// `base`가 지정되지 않은 경우 `name` + `ext`가 사용됩니다.
path.format({
  root: '/',
  name: 'file',
  ext: '.txt',
})
// 반환 값: '/file.txt'

// `ext`에 점이 지정되지 않은 경우 점이 추가됩니다.
path.format({
  root: '/',
  name: 'file',
  ext: 'txt',
})
// 반환 값: '/file.txt'

Windows에서:

js
path.format({
  dir: 'C:\\path\\dir',
  base: 'file.txt',
})
// 반환 값: 'C:\\path\\dir\\file.txt'

path.matchesGlob(path, pattern)

추가된 버전: v22.5.0, v20.17.0

[안정성: 1 - 실험적]

안정성: 1 안정성: 1 - 실험적

  • path <string> 글로브 매칭할 경로입니다.
  • pattern <string> 경로와 비교할 글로브입니다.
  • 반환 값: <boolean> pathpattern과 일치하는지 여부입니다.

path.matchesGlob() 메서드는 pathpattern과 일치하는지 확인합니다.

예시:

js
path.matchesGlob('/foo/bar', '/foo/*') // true
path.matchesGlob('/foo/bar*', 'foo/bird') // false

path 또는 pattern이 문자열이 아니면 TypeError가 발생합니다.

path.isAbsolute(path)

추가된 버전: v0.11.2

path.isAbsolute() 메서드는 path가 절대 경로인지 확인합니다.

주어진 path가 길이가 0인 문자열이면 false가 반환됩니다.

예를 들어, POSIX에서는 다음과 같습니다:

js
path.isAbsolute('/foo/bar') // true
path.isAbsolute('/baz/..') // true
path.isAbsolute('qux/') // false
path.isAbsolute('.') // false

Windows에서는 다음과 같습니다:

js
path.isAbsolute('//server') // true
path.isAbsolute('\\\\server') // true
path.isAbsolute('C:/foo/..') // true
path.isAbsolute('C:\\foo\\..') // true
path.isAbsolute('bar\\baz') // false
path.isAbsolute('bar/baz') // false
path.isAbsolute('.') // false

path가 문자열이 아니면 TypeError가 발생합니다.

path.join([...paths])

추가된 버전: v0.1.16

path.join() 메서드는 플랫폼별 구분 기호를 사용하여 지정된 모든 path 세그먼트를 함께 연결한 다음 결과 경로를 정규화합니다.

길이가 0인 path 세그먼트는 무시됩니다. 연결된 경로 문자열이 길이가 0인 문자열인 경우 현재 작업 디렉토리를 나타내는 '.'이 반환됩니다.

js
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')
// 반환 값: '/foo/bar/baz/asdf'

path.join('foo', {}, 'bar')
// 'TypeError: Path must be a string. Received {}'를 던집니다.

경로 세그먼트 중 하나라도 문자열이 아니면 TypeError가 발생합니다.

path.normalize(path)

추가된 버전: v0.1.23

path.normalize() 메서드는 주어진 path를 정규화하여 '..''.' 세그먼트를 처리합니다.

여러 개의 연속적인 경로 세그먼트 분리 문자(예: POSIX에서는 /, Windows에서는 \ 또는 /)가 발견되면, 플랫폼별 경로 세그먼트 분리 문자(POSIX에서는 /, Windows에서는 \)의 단일 인스턴스로 대체됩니다. 후행 분리자는 유지됩니다.

path가 길이가 0인 문자열이면, 현재 작업 디렉터리를 나타내는 '.'이 반환됩니다.

POSIX에서 이 함수가 적용하는 정규화 유형은 POSIX 사양을 엄격하게 준수하지 않습니다. 예를 들어, 이 함수는 두 개의 선행 슬래시를 일반 절대 경로인 것처럼 단일 슬래시로 대체합니다. 반면 일부 POSIX 시스템에서는 정확히 두 개의 선행 슬래시로 시작하는 경로에 특별한 의미를 부여합니다. 마찬가지로, .. 세그먼트 제거와 같이 이 함수가 수행하는 다른 대체 작업은 기본 시스템이 경로를 해결하는 방식을 변경할 수 있습니다.

예를 들어, POSIX에서는 다음과 같습니다.

js
path.normalize('/foo/bar//baz/asdf/quux/..')
// 반환값: '/foo/bar/baz/asdf'

Windows에서는 다음과 같습니다.

js
path.normalize('C:\\temp\\\\foo\\bar\\..\\')
// 반환값: 'C:\\temp\\foo\\'

Windows는 여러 경로 분리자를 인식하므로 두 분리자 모두 Windows에서 선호하는 분리자(\)의 인스턴스로 대체됩니다.

js
path.win32.normalize('C:////temp\\\\/\\/\\/foo/bar')
// 반환값: 'C:\\temp\\foo\\bar'

path가 문자열이 아니면 TypeError가 발생합니다.

path.parse(path)

추가된 버전: v0.11.15

path.parse() 메서드는 path의 중요한 요소를 나타내는 속성을 가진 객체를 반환합니다. 후행 디렉터리 분리자는 무시됩니다. path.sep을 참조하세요.

반환된 객체에는 다음 속성이 있습니다.

예를 들어, POSIX에서는 다음과 같습니다.

js
path.parse('/home/user/dir/file.txt')
// 반환값:
// { root: '/',
//   dir: '/home/user/dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file' }
text
┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
"  /    home/user/dir / file  .txt "
└──────┴──────────────┴──────┴─────┘
( "" 행의 모든 공백은 무시해야 합니다. 순전히 서식용입니다.)

Windows에서는 다음과 같습니다.

js
path.parse('C:\\path\\dir\\file.txt')
// 반환값:
// { root: 'C:\\',
//   dir: 'C:\\path\\dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file' }
text
┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
" C:\      path\dir   \ file  .txt "
└──────┴──────────────┴──────┴─────┘
( "" 행의 모든 공백은 무시해야 합니다. 순전히 서식용입니다.)

path가 문자열이 아니면 TypeError가 발생합니다.

path.posix

[기록]

버전변경 사항
v15.3.0require('path/posix')로 노출되었습니다.
v0.11.15추가됨: v0.11.15

path.posix 속성은 path 메서드의 POSIX 특정 구현에 대한 접근을 제공합니다.

API는 require('node:path').posix 또는 require('node:path/posix')를 통해 접근할 수 있습니다.

path.relative(from, to)

[기록]

버전변경 사항
v6.8.0Windows에서 UNC 경로의 선행 슬래시가 이제 반환 값에 포함됩니다.
v0.5.0추가됨: v0.5.0

path.relative() 메서드는 현재 작업 디렉토리를 기준으로 from에서 to까지의 상대 경로를 반환합니다. fromto가 각각 동일한 경로로 확인되는 경우(각각에서 path.resolve()를 호출한 후), 길이가 0인 문자열이 반환됩니다.

길이가 0인 문자열이 from 또는 to로 전달되면 길이가 0인 문자열 대신 현재 작업 디렉토리가 사용됩니다.

예를 들어, POSIX에서:

js
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')
// 반환값: '../../impl/bbb'

Windows에서:

js
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb')
// 반환값: '..\\..\\impl\\bbb'

from 또는 to가 문자열이 아니면 TypeError가 발생합니다.

path.resolve([...paths])

추가됨: v0.3.4

  • ...paths <string> 경로 또는 경로 세그먼트의 시퀀스
  • 반환값: <string>

path.resolve() 메서드는 경로 또는 경로 세그먼트의 시퀀스를 절대 경로로 확인합니다.

주어진 경로 시퀀스는 오른쪽에서 왼쪽으로 처리되며, 절대 경로가 구성될 때까지 각 후속 path가 앞에 추가됩니다. 예를 들어, 경로 세그먼트 시퀀스 /foo, /bar, baz가 주어지면, path.resolve('/foo', '/bar', 'baz')를 호출하면 /bar/baz가 반환됩니다. 왜냐하면 'baz'는 절대 경로가 아니지만 '/bar' + '/' + 'baz'는 그렇기 때문입니다.

주어진 모든 path 세그먼트를 처리한 후에도 절대 경로가 아직 생성되지 않았으면 현재 작업 디렉토리가 사용됩니다.

결과 경로는 정규화되며, 경로가 루트 디렉토리로 확인되지 않는 한 후행 슬래시는 제거됩니다.

길이가 0인 path 세그먼트는 무시됩니다.

path 세그먼트가 전달되지 않으면 path.resolve()는 현재 작업 디렉토리의 절대 경로를 반환합니다.

js
path.resolve('/foo/bar', './baz')
// 반환값: '/foo/bar/baz'

path.resolve('/foo/bar', '/tmp/file/')
// 반환값: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')
// 현재 작업 디렉토리가 /home/myself/node이면,
// 이는 '/home/myself/node/wwwroot/static_files/gif/image.gif'을 반환합니다.

인수가 문자열이 아니면 TypeError가 발생합니다.

path.sep

추가됨: v0.7.9

플랫폼별 경로 세그먼트 구분 기호를 제공합니다.

  • Windows에서는 \
  • POSIX에서는 /

예를 들어 POSIX에서는 다음과 같습니다.

js
'foo/bar/baz'.split(path.sep)
// 반환값: ['foo', 'bar', 'baz']

Windows에서는 다음과 같습니다.

js
'foo\\bar\\baz'.split(path.sep)
// 반환값: ['foo', 'bar', 'baz']

Windows에서는 정방향 슬래시(/)와 역방향 슬래시(\) 모두 경로 세그먼트 구분 기호로 허용됩니다. 그러나 path 메서드는 역방향 슬래시(\)만 추가합니다.

path.toNamespacedPath(path)

추가됨: v9.0.0

Windows 시스템에서만 주어진 path에 대한 동일한 네임스페이스 접두어가 붙은 경로를 반환합니다. path가 문자열이 아닌 경우, path는 수정 없이 반환됩니다.

이 메서드는 Windows 시스템에서만 의미가 있습니다. POSIX 시스템에서는 메서드가 작동하지 않으며 항상 수정 없이 path를 반환합니다.

path.win32

[기록]

버전변경 사항
v15.3.0require('path/win32')로 노출되었습니다.
v0.11.15추가됨: v0.11.15

path.win32 속성은 path 메서드의 Windows 특정 구현에 대한 액세스를 제공합니다.

API는 require('node:path').win32 또는 require('node:path/win32')를 통해 액세스할 수 있습니다.