Skip to content

Util

[Stable: 2 - Stable]

Stable: 2 Stability: 2 - 안정적

소스 코드: lib/util.js

node:util 모듈은 Node.js 내부 API의 요구 사항을 지원합니다. 많은 유틸리티가 애플리케이션 및 모듈 개발자에게도 유용합니다. 액세스하려면 다음을 수행하십시오.

js
const util = require('node:util')

util.callbackify(original)

추가된 버전: v8.2.0

async 함수(또는 Promise를 반환하는 함수)를 가져와서 오류 우선 콜백 스타일을 따르는 함수를 반환합니다. 즉, 마지막 인수로 (err, value) => ... 콜백을 취합니다. 콜백에서 첫 번째 인수는 거부 이유(또는 Promise가 해결된 경우 null)이고, 두 번째 인수는 해결된 값입니다.

js
const util = require('node:util')

async function fn() {
  return 'hello world'
}
const callbackFunction = util.callbackify(fn)

callbackFunction((err, ret) => {
  if (err) throw err
  console.log(ret)
})

다음이 출력됩니다.

text
hello world

콜백은 비동기적으로 실행되며 제한된 스택 추적을 갖습니다. 콜백이 오류를 던지면 프로세스는 'uncaughtException' 이벤트를 발생시키고, 처리되지 않으면 종료됩니다.

null은 콜백의 첫 번째 인수로 특별한 의미를 가지므로 래핑된 함수가 falsy 값을 이유로 Promise를 거부하면 해당 값은 원래 값이 reason이라는 필드에 저장된 Error로 래핑됩니다.

js
function fn() {
  return Promise.reject(null)
}
const callbackFunction = util.callbackify(fn)

callbackFunction((err, ret) => {
  // Promise가 `null`로 거부되면 Error로 래핑되고
  // 원본 값은 `reason`에 저장됩니다.
  err && Object.hasOwn(err, 'reason') && err.reason === null // true
})

util.debuglog(section[, callback])

추가된 버전: v0.11.3

  • section <string> debuglog 함수가 생성되는 애플리케이션 부분을 식별하는 문자열입니다.
  • callback <Function> 최적화된 로깅 함수인 함수 인자를 사용하여 로깅 함수가 처음 호출될 때 호출되는 콜백입니다.
  • 반환 값: <Function> 로깅 함수

util.debuglog() 메서드는 NODE_DEBUG 환경 변수의 존재 여부에 따라 조건부로 디버그 메시지를 stderr에 쓰는 함수를 만드는 데 사용됩니다. section 이름이 해당 환경 변수 값 내에 나타나면 반환된 함수는 console.error()와 유사하게 작동합니다. 그렇지 않으면 반환된 함수는 아무 작업도 하지 않습니다.

js
const util = require('node:util')
const debuglog = util.debuglog('foo')

debuglog('hello from foo [%d]', 123)

이 프로그램이 환경에서 NODE_DEBUG=foo와 함께 실행되면 다음과 같은 출력을 냅니다.

bash
FOO 3245: hello from foo [123]

여기서 3245는 프로세스 ID입니다. 해당 환경 변수가 설정되지 않은 상태에서 실행되면 아무것도 출력하지 않습니다.

section은 와일드카드도 지원합니다.

js
const util = require('node:util')
const debuglog = util.debuglog('foo-bar')

debuglog("hi there, it's foo-bar [%d]", 2333)

환경에서 NODE_DEBUG=foo*와 함께 실행되면 다음과 같은 출력을 냅니다.

bash
FOO-BAR 3257: hi there, it's foo-bar [2333]

여러 쉼표로 구분된 section 이름을 NODE_DEBUG 환경 변수에 지정할 수 있습니다. NODE_DEBUG=fs,net,tls.

선택적 callback 인수는 초기화나 불필요한 래핑이 없는 다른 함수로 로깅 함수를 대체하는 데 사용할 수 있습니다.

js
const util = require('node:util')
let debuglog = util.debuglog('internals', debug => {
  // 섹션이 활성화되었는지 테스트하는 것을 최적화하는 로깅 함수로 대체합니다.
  debuglog = debug
})

debuglog().enabled

추가된 버전: v14.9.0

util.debuglog().enabled getter는 NODE_DEBUG 환경 변수의 존재 여부에 따라 조건부로 사용할 수 있는 테스트를 만드는 데 사용됩니다. section 이름이 해당 환경 변수 값 내에 나타나면 반환 값은 true가 됩니다. 그렇지 않으면 반환 값은 false가 됩니다.

js
const util = require('node:util')
const enabled = util.debuglog('foo').enabled
if (enabled) {
  console.log('foo에서 안녕하세요 [%d]', 123)
}

이 프로그램을 NODE_DEBUG=foo 환경에서 실행하면 다음과 같은 출력이 나타납니다.

bash
foo에서 안녕하세요 [123]

util.debug(section)

추가된 버전: v14.9.0

util.debuglog의 별칭입니다. 사용법은 util.debuglog().enabled만 사용할 때 로깅을 의미하지 않는 가독성을 허용합니다.

util.deprecate(fn, msg[, code])

[기록]

버전변경 사항
v10.0.0더 이상 사용되지 않는 경고는 각 코드에 대해 한 번만 발생합니다.
v0.8.0추가된 버전: v0.8.0
  • fn <Function> 더 이상 사용되지 않는 함수입니다.
  • msg <string> 더 이상 사용되지 않는 함수가 호출될 때 표시할 경고 메시지입니다.
  • code <string> 더 이상 사용되지 않는 코드입니다. 코드 목록은 더 이상 사용되지 않는 API 목록을 참조하십시오.
  • 반환 값: <Function> 경고를 내보내도록 래핑된 더 이상 사용되지 않는 함수입니다.

util.deprecate() 메서드는 fn(함수 또는 클래스일 수 있음)을 더 이상 사용되지 않는 것으로 표시하는 방식으로 래핑합니다.

js
const util = require('node:util')

exports.obsoleteFunction = util.deprecate(() => {
  // 여기에서 작업을 수행합니다.
}, 'obsoleteFunction()은 더 이상 사용되지 않습니다. 대신 newShinyFunction()을 사용하십시오.')

호출되면 util.deprecate()'warning' 이벤트를 사용하여 DeprecationWarning을 내보내는 함수를 반환합니다. 경고는 반환된 함수가 처음 호출될 때 stderr에 내보내지고 출력됩니다. 경고가 내보내진 후에는 래핑된 함수가 경고를 내보내지 않고 호출됩니다.

동일한 선택적 codeutil.deprecate()에 대한 여러 호출에서 제공되는 경우 경고는 해당 code에 대해 한 번만 내보내집니다.

js
const util = require('node:util')

const fn1 = util.deprecate(someFunction, someMessage, 'DEP0001')
const fn2 = util.deprecate(someOtherFunction, someOtherMessage, 'DEP0001')
fn1() // 코드 DEP0001로 더 이상 사용되지 않는 경고를 내보냅니다.
fn2() // 코드가 같으므로 더 이상 사용되지 않는 경고를 내보내지 않습니다.

--no-deprecation 또는 --no-warnings 명령줄 플래그가 사용되거나 process.noDeprecation 속성이 첫 번째 더 이상 사용되지 않는 경고 이전true로 설정된 경우 util.deprecate() 메서드는 아무 것도 하지 않습니다.

--trace-deprecation 또는 --trace-warnings 명령줄 플래그가 설정되거나 process.traceDeprecation 속성이 true로 설정되면 더 이상 사용되지 않는 함수가 처음 호출될 때 경고와 스택 추적이 stderr에 출력됩니다.

--throw-deprecation 명령줄 플래그가 설정되거나 process.throwDeprecation 속성이 true로 설정되면 더 이상 사용되지 않는 함수가 호출될 때 예외가 발생합니다.

--throw-deprecation 명령줄 플래그와 process.throwDeprecation 속성은 --trace-deprecationprocess.traceDeprecation보다 우선합니다.

util.format(format[, ...args])

[히스토리]

버전변경 사항
v12.11.0%c 지정자가 이제 무시됩니다.
v12.0.0format 인자는 실제로 포맷 지정자를 포함하는 경우에만 그렇게 처리됩니다.
v12.0.0format 인자가 포맷 문자열이 아닌 경우, 출력 문자열의 포맷은 더 이상 첫 번째 인자의 유형에 의존하지 않습니다. 이 변경은 첫 번째 인자가 문자열이 아닐 때 출력되던 문자열에서 이전에 존재하던 따옴표를 제거합니다.
v11.4.0%d, %f, %i 지정자가 이제 Symbol을 올바르게 지원합니다.
v11.4.0%o 지정자의 depth가 다시 기본 깊이 4를 갖습니다.
v11.0.0%o 지정자의 depth 옵션이 이제 기본 깊이로 대체됩니다.
v10.12.0%d%i 지정자가 이제 BigInt를 지원합니다.
v8.4.0%o%O 지정자가 이제 지원됩니다.
v0.5.3v0.5.3에 추가되었습니다.
  • format <string> printf와 유사한 포맷 문자열.

util.format() 메서드는 첫 번째 인자를 0개 이상의 포맷 지정자를 포함할 수 있는 printf와 유사한 포맷 문자열로 사용하여 포맷된 문자열을 반환합니다. 각 지정자는 해당하는 인자의 변환된 값으로 대체됩니다. 지원되는 지정자는 다음과 같습니다.

  • %s: StringBigInt, Object-0을 제외한 모든 값을 변환하는 데 사용됩니다. BigInt 값은 n으로 표현되며, 사용자 정의 toString 함수가 없는 객체는 { depth: 0, colors: false, compact: 3 } 옵션을 사용하여 util.inspect()로 검사됩니다.
  • %d: NumberBigIntSymbol을 제외한 모든 값을 변환하는 데 사용됩니다.
  • %i: parseInt(value, 10)BigIntSymbol을 제외한 모든 값에 사용됩니다.
  • %f: parseFloat(value)Symbol을 제외한 모든 값에 사용됩니다.
  • %j: JSON. 인자가 순환 참조를 포함하는 경우 '[Circular]' 문자열로 대체됩니다.
  • %o: Object. 일반적인 JavaScript 객체 포맷을 사용하는 객체의 문자열 표현입니다. { showHidden: true, showProxy: true } 옵션을 사용하는 util.inspect()와 유사합니다. 이는 열거 불가능한 속성 및 프록시를 포함한 전체 객체를 표시합니다.
  • %O: Object. 일반적인 JavaScript 객체 포맷을 사용하는 객체의 문자열 표현입니다. 옵션이 없는 util.inspect()와 유사합니다. 이는 열거 불가능한 속성 및 프록시를 포함하지 않는 전체 객체를 표시합니다.
  • %c: CSS. 이 지정자는 무시되며 전달된 CSS를 건너뜁니다.
  • %%: 단일 퍼센트 기호 ('%'). 이는 인자를 소비하지 않습니다.
  • 반환 값: <string> 포맷된 문자열

지정자에 해당하는 인자가 없는 경우, 대체되지 않습니다.

js
util.format('%s:%s', 'foo')
// 반환 값: 'foo:%s'

포맷 문자열의 일부가 아닌 값은 유형이 string이 아니면 util.inspect()를 사용하여 포맷됩니다.

util.format() 메서드에 포맷 지정자 수보다 많은 인자가 전달된 경우, 추가 인자는 공백으로 구분되어 반환된 문자열에 연결됩니다.

js
util.format('%s:%s', 'foo', 'bar', 'baz')
// 반환 값: 'foo:bar baz'

첫 번째 인자에 유효한 포맷 지정자가 포함되어 있지 않으면, util.format()은 모든 인자를 공백으로 구분하여 연결한 문자열을 반환합니다.

js
util.format(1, 2, 3)
// 반환 값: '1 2 3'

인자가 하나만 util.format()에 전달된 경우, 포맷하지 않고 그대로 반환됩니다.

js
util.format('%% %s')
// 반환 값: '%% %s'

util.format()은 디버깅 도구로 의도된 동기 메서드입니다. 일부 입력 값은 이벤트 루프를 차단할 수 있는 상당한 성능 오버헤드를 가질 수 있습니다. 이 함수를 주의해서 사용하고 중요한 코드 경로에서 사용하지 마십시오.

util.formatWithOptions(inspectOptions, format[, ...args])

추가된 버전: v10.0.0

이 함수는 util.format()과 동일하지만, util.inspect()로 전달되는 옵션을 지정하는 inspectOptions 인자를 받는다는 점이 다릅니다.

js
util.formatWithOptions({ colors: true }, '객체 %O 보기', { foo: 42 })
// 터미널에 출력될 때 `42`가 숫자로 색상이 지정된 '객체 { foo: 42 } 보기'를 반환합니다.

util.getCallSites(frameCountOrOptions, [options])

[안정성: 1 - 실험적]

안정성: 1 안정성: 1.1 - 활발한 개발 중

[기록]

버전변경 사항
v23.3.0API 이름이 util.getCallSite에서 util.getCallSites()로 변경됨.
v22.9.0추가된 버전: v22.9.0
  • frameCount <number> 호출 사이트 객체로 캡처할 프레임의 선택적 개수입니다. 기본값: 10. 허용 범위는 1에서 200 사이입니다.

  • options <Object> 선택 사항

    • sourceMap <boolean> 소스 맵에서 스택 추적의 원래 위치를 재구성합니다. --enable-source-maps 플래그를 사용하여 기본적으로 활성화됩니다.
  • 반환 값: <Object[]> 호출 사이트 객체 배열

    • functionName <string> 이 호출 사이트와 관련된 함수의 이름을 반환합니다.
    • scriptName <string> 이 호출 사이트의 함수 스크립트가 들어 있는 리소스의 이름을 반환합니다.
    • lineNumber <number> 관련 함수 호출의 1 기반 라인 번호를 반환합니다.
    • column <number> 관련 함수 호출의 라인에서 1 기반 열 오프셋을 반환합니다.

호출 함수 스택을 포함하는 호출 사이트 객체 배열을 반환합니다.

js
const util = require('node:util')

function exampleFunction() {
  const callSites = util.getCallSites()

  console.log('호출 사이트:')
  callSites.forEach((callSite, index) => {
    console.log(`호출 사이트 ${index + 1}:`)
    console.log(`함수 이름: ${callSite.functionName}`)
    console.log(`스크립트 이름: ${callSite.scriptName}`)
    console.log(`라인 번호: ${callSite.lineNumber}`)
    console.log(`열 번호: ${callSite.column}`)
  })
  // 호출 사이트 1:
  // 함수 이름: exampleFunction
  // 스크립트 이름: /home/example.js
  // 라인 번호: 5
  // 열 번호: 26

  // 호출 사이트 2:
  // 함수 이름: anotherFunction
  // 스크립트 이름: /home/example.js
  // 라인 번호: 22
  // 열 번호: 3

  // ...
}

// 다른 스택 레이어를 시뮬레이션하는 함수
function anotherFunction() {
  exampleFunction()
}

anotherFunction()

sourceMap 옵션을 true로 설정하여 원래 위치를 재구성할 수 있습니다. 소스 맵을 사용할 수 없는 경우 원래 위치는 현재 위치와 동일합니다. --experimental-transform-types를 사용할 때와 같이 --enable-source-maps 플래그가 활성화되면 sourceMap은 기본적으로 true가 됩니다.

ts
import util from 'node:util'

interface Foo {
  foo: string
}

const callSites = util.getCallSites({ sourceMap: true })

// sourceMap 포함:
// 함수 이름: ''
// 스크립트 이름: example.js
// 라인 번호: 7
// 열 번호: 26

// sourceMap 없음:
// 함수 이름: ''
// 스크립트 이름: example.js
// 라인 번호: 2
// 열 번호: 26

util.getSystemErrorName(err)

추가된 버전: v9.7.0

Node.js API에서 온 숫자 오류 코드에 대한 문자열 이름을 반환합니다. 오류 코드와 오류 이름 간의 매핑은 플랫폼에 따라 다릅니다. 일반 오류 이름은 일반 시스템 오류를 참조하세요.

js
fs.access('file/that/does/not/exist', err => {
  const name = util.getSystemErrorName(err.errno)
  console.error(name) // ENOENT
})

util.getSystemErrorMap()

추가된 버전: v16.0.0, v14.17.0

Node.js API에서 사용 가능한 모든 시스템 오류 코드의 맵을 반환합니다. 오류 코드와 오류 이름 간의 매핑은 플랫폼에 따라 다릅니다. 일반 오류 이름은 일반 시스템 오류를 참조하세요.

js
fs.access('file/that/does/not/exist', err => {
  const errorMap = util.getSystemErrorMap()
  const name = errorMap.get(err.errno)
  console.error(name) // ENOENT
})

util.getSystemErrorMessage(err)

추가된 버전: v23.1.0

Node.js API에서 온 숫자 오류 코드에 대한 문자열 메시지를 반환합니다. 오류 코드와 문자열 메시지 간의 매핑은 플랫폼에 따라 다릅니다.

js
fs.access('file/that/does/not/exist', err => {
  const name = util.getSystemErrorMessage(err.errno)
  console.error(name) // No such file or directory
})

util.inherits(constructor, superConstructor)

[연혁]

버전변경 사항
v5.0.0constructor 매개변수가 이제 ES6 클래스를 참조할 수 있습니다.
v0.3.0추가된 버전: v0.3.0

[안정성: 3 - 레거시]

안정성: 3 안정성: 3 - 레거시: ES2015 클래스 구문과 extends 키워드를 대신 사용하십시오.

util.inherits()의 사용은 권장되지 않습니다. 언어 수준의 상속 지원을 받으려면 ES6 classextends 키워드를 사용하십시오. 또한 두 스타일이 의미적으로 호환되지 않음을 참고하십시오.

생성자에서 다른 생성자로 프로토타입 메서드를 상속합니다. constructor의 프로토타입은 superConstructor에서 생성된 새 객체로 설정됩니다.

이것은 주로 Object.setPrototypeOf(constructor.prototype, superConstructor.prototype) 위에 몇 가지 입력 유효성 검사를 추가합니다. 추가 편의를 위해 superConstructorconstructor.super_ 속성을 통해 액세스할 수 있습니다.

js
const util = require('node:util')
const EventEmitter = require('node:events')

function MyStream() {
  EventEmitter.call(this)
}

util.inherits(MyStream, EventEmitter)

MyStream.prototype.write = function (data) {
  this.emit('data', data)
}

const stream = new MyStream()

console.log(stream instanceof EventEmitter) // true
console.log(MyStream.super_ === EventEmitter) // true

stream.on('data', data => {
  console.log(`Received data: "${data}"`)
})
stream.write('It works!') // Received data: "It works!"

classextends를 사용하는 ES6 예시:

js
const EventEmitter = require('node:events')

class MyStream extends EventEmitter {
  write(data) {
    this.emit('data', data)
  }
}

const stream = new MyStream()

stream.on('data', data => {
  console.log(`Received data: "${data}"`)
})
stream.write('With ES6')

util.inspect(object[, options])

util.inspect(object[, showHidden[, depth[, colors]]])

[History]

버전변경 사항
v16.18.0SetMap 검사 시 maxArrayLength에 대한 지원이 추가되었습니다.
v17.3.0, v16.14.0이제 numericSeparator 옵션이 지원됩니다.
v13.0.0순환 참조는 이제 참조에 대한 마커를 포함합니다.
v14.6.0, v12.19.0이제 object가 다른 vm.Context에서 온 경우, 사용자 지정 검사 함수는 컨텍스트 관련 인수를 더 이상 받지 않습니다.
v13.13.0, v12.17.0이제 maxStringLength 옵션이 지원됩니다.
v13.5.0, v12.16.0showHiddentrue인 경우 사용자 정의 프로토타입 속성이 검사됩니다.
v12.0.0compact 옵션 기본값이 3으로 변경되었고 breakLength 옵션 기본값이 80으로 변경되었습니다.
v12.0.0사용자 지정 검사 함수의 컨텍스트 인수에 내부 속성이 더 이상 나타나지 않습니다.
v11.11.0compact 옵션은 새 출력 모드에 대한 숫자를 허용합니다.
v11.7.0이제 ArrayBuffer는 바이너리 내용도 표시합니다.
v11.5.0이제 getters 옵션이 지원됩니다.
v11.4.0depth 기본값이 다시 2로 변경되었습니다.
v11.0.0depth 기본값이 20으로 변경되었습니다.
v11.0.0검사 출력은 이제 약 128MiB로 제한됩니다. 이 크기를 초과하는 데이터는 완전히 검사되지 않습니다.
v10.12.0이제 sorted 옵션이 지원됩니다.
v10.6.0연결 리스트와 유사한 객체를 이제 최대 호출 스택 크기까지 검사할 수 있습니다.
v10.0.0이제 WeakMapWeakSet 항목도 검사할 수 있습니다.
v9.9.0이제 compact 옵션이 지원됩니다.
v6.6.0사용자 지정 검사 함수가 이제 this를 반환할 수 있습니다.
v6.3.0이제 breakLength 옵션이 지원됩니다.
v6.1.0이제 maxArrayLength 옵션이 지원됩니다. 특히 긴 배열은 기본적으로 잘립니다.
v6.1.0이제 showProxy 옵션이 지원됩니다.
v0.3.0v0.3.0에서 추가됨
  • object <any> 모든 JavaScript 기본 또는 Object.

  • options <Object>

    • showHidden <boolean> true이면 object의 열거할 수 없는 심볼과 속성이 포맷된 결과에 포함됩니다. WeakMapWeakSet 항목과 사용자 정의 프로토타입 속성(메서드 속성 제외)도 포함됩니다. 기본값: false.
    • depth <number> object을 포맷하는 동안 재귀할 횟수를 지정합니다. 이는 큰 객체를 검사하는 데 유용합니다. 최대 호출 스택 크기까지 재귀하려면 Infinity 또는 null을 전달합니다. 기본값: 2.
    • colors <boolean> true이면 출력이 ANSI 색상 코드로 스타일이 지정됩니다. 색상을 사용자 지정할 수 있습니다. Customizing util.inspect colors을 참조하십시오. 기본값: false.
    • customInspect <boolean> false이면 [util.inspect.custom](depth, opts, inspect) 함수가 호출되지 않습니다. 기본값: true.
    • showProxy <boolean> true이면 Proxy 검사에 targethandler 객체가 포함됩니다. 기본값: false.
    • maxArrayLength <integer> 포맷 시 포함할 Array, TypedArray, Map, Set, WeakMapWeakSet 요소의 최대 개수를 지정합니다. 모든 요소를 표시하려면 null 또는 Infinity로 설정합니다. 요소를 표시하지 않으려면 0 또는 음수로 설정합니다. 기본값: 100.
    • maxStringLength <integer> 포맷 시 포함할 최대 문자 수를 지정합니다. 모든 요소를 표시하려면 null 또는 Infinity로 설정합니다. 문자를 표시하지 않으려면 0 또는 음수로 설정합니다. 기본값: 10000.
    • breakLength <integer> 입력 값이 여러 줄로 분할되는 길이를 지정합니다. 입력을 단일 행으로 포맷하려면 Infinity로 설정합니다(숫자 >= 1로 설정된 compact와 조합). 기본값: 80.
    • compact <boolean> | <integer> 이를 false로 설정하면 각 객체 키가 새 줄에 표시됩니다. breakLength보다 긴 텍스트에서 새 줄이 생깁니다. 숫자로 설정하면 모든 속성이 breakLength에 맞으면 가장 안쪽 n개의 요소가 단일 행에 통합됩니다. 짧은 배열 요소도 함께 그룹화됩니다. 자세한 내용은 아래 예제를 참조하십시오. 기본값: 3.
    • sorted <boolean> | <Function> true 또는 함수로 설정하면 객체의 모든 속성과 SetMap 항목이 결과 문자열에서 정렬됩니다. true로 설정하면 기본 정렬이 사용됩니다. 함수로 설정하면 비교 함수로 사용됩니다.
    • getters <boolean> | <string> true로 설정하면 getter가 검사됩니다. 'get'으로 설정하면 해당 setter가 없는 getter만 검사됩니다. 'set'으로 설정하면 해당 setter가 있는 getter만 검사됩니다. 이는 getter 함수에 따라 부작용을 일으킬 수 있습니다. 기본값: false.
    • numericSeparator <boolean> true로 설정하면 모든 bigint 및 숫자에서 매 세 자리마다 밑줄이 사용됩니다. 기본값: false.
  • 반환 값: <string> object의 표현입니다.

util.inspect() 메서드는 디버깅을 위한 object의 문자열 표현을 반환합니다. util.inspect의 출력은 언제든지 변경될 수 있으며 프로그래밍 방식으로 의존해서는 안 됩니다. 결과를 변경하는 추가 options가 전달될 수 있습니다. util.inspect()는 검사된 값에 대한 식별 가능한 태그를 만들기 위해 생성자의 이름 및/또는 @@toStringTag를 사용합니다.

js
class Foo {
  get [Symbol.toStringTag]() {
    return 'bar'
  }
}

class Bar {}

const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } })

util.inspect(new Foo()) // 'Foo [bar] {}'
util.inspect(new Bar()) // 'Bar {}'
util.inspect(baz) // '[foo] {}'

순환 참조는 참조 인덱스를 사용하여 앵커를 가리킵니다.

js
const { inspect } = require('node:util')

const obj = {}
obj.a = [obj]
obj.b = {}
obj.b.inner = obj.b
obj.b.obj = obj

console.log(inspect(obj))
// <ref *1> {
//   a: [ [Circular *1] ],
//   b: <ref *2> { inner: [Circular *2], obj: [Circular *1] }
// }

다음 예제는 util 객체의 모든 속성을 검사합니다.

js
const util = require('node:util')

console.log(util.inspect(util, { showHidden: true, depth: null }))

다음 예제는 compact 옵션의 효과를 강조 표시합니다.

js
const util = require('node:util')

const o = {
  a: [
    1,
    2,
    [
      [
        'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' +
          'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.',
        'test',
        'foo',
      ],
    ],
    4,
  ],
  b: new Map([
    ['za', 1],
    ['zb', 'test'],
  ]),
}
console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 }))

// { a:
//   [ 1,
//     2,
//     [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // 긴 줄
//           'test',
//           'foo' ] ],
//     4 ],
//   b: Map(2) { 'za' => 1, 'zb' => 'test' } }

// `compact`를 false 또는 정수로 설정하면 더 읽기 쉬운 출력이 생성됩니다.
console.log(util.inspect(o, { compact: false, depth: 5, breakLength: 80 }))

// {
//   a: [
//     1,
//     2,
//     [
//       [
//         'Lorem ipsum dolor sit amet,\n' +
//           'consectetur adipiscing elit, sed do eiusmod \n' +
//           'tempor incididunt ut labore et dolore magna aliqua.',
//         'test',
//         'foo'
//       ]
//     ],
//     4
//   ],
//   b: Map(2) {
//     'za' => 1,
//     'zb' => 'test'
//   }
// }

// `breakLength`를 예를 들어 150으로 설정하면 "Lorem ipsum" 텍스트가
// 단일 행으로 출력됩니다.

showHidden 옵션을 사용하면 WeakMapWeakSet 항목을 검사할 수 있습니다. maxArrayLength보다 많은 항목이 있는 경우 어떤 항목이 표시되는지 보장되지 않습니다. 즉, 동일한 WeakSet 항목을 두 번 검색하면 다른 출력이 생성될 수 있습니다. 또한 남아 있는 강력한 참조가 없는 항목은 언제든지 가비지 수집될 수 있습니다.

js
const { inspect } = require('node:util')

const obj = { a: 1 }
const obj2 = { b: 2 }
const weakSet = new WeakSet([obj, obj2])

console.log(inspect(weakSet, { showHidden: true }))
// WeakSet { { a: 1 }, { b: 2 } }

sorted 옵션은 객체의 속성 삽입 순서가 util.inspect() 결과에 영향을 미치지 않도록 합니다.

js
const { inspect } = require('node:util')
const assert = require('node:assert')

const o1 = {
  b: [2, 3, 1],
  a: '`a` comes before `b`',
  c: new Set([2, 3, 1]),
}
console.log(inspect(o1, { sorted: true }))
// { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } }
console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) }))
// { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' }

const o2 = {
  c: new Set([2, 1, 3]),
  a: '`a` comes before `b`',
  b: [2, 3, 1],
}
assert.strict.equal(inspect(o1, { sorted: true }), inspect(o2, { sorted: true }))

numericSeparator 옵션은 모든 숫자에 매 세 자리마다 밑줄을 추가합니다.

js
const { inspect } = require('node:util')

const thousand = 1_000
const million = 1_000_000
const bigNumber = 123_456_789n
const bigDecimal = 1_234.123_45

console.log(inspect(thousand, { numericSeparator: true }))
// 1_000
console.log(inspect(million, { numericSeparator: true }))
// 1_000_000
console.log(inspect(bigNumber, { numericSeparator: true }))
// 123_456_789n
console.log(inspect(bigDecimal, { numericSeparator: true }))
// 1_234.123_45

util.inspect()는 디버깅을 위한 동기식 메서드입니다. 최대 출력 길이는 약 128MiB입니다. 더 긴 출력을 생성하는 입력은 잘립니다.

util.inspect 색상 사용자 정의

util.inspect의 색상 출력(활성화된 경우)은 util.inspect.stylesutil.inspect.colors 속성을 통해 전역적으로 사용자 정의할 수 있습니다.

util.inspect.styles는 스타일 이름을 util.inspect.colors의 색상에 연결하는 맵입니다.

기본 스타일 및 연결된 색상은 다음과 같습니다.

  • bigint: yellow
  • boolean: yellow
  • date: magenta
  • module: underline
  • name: (스타일 없음)
  • null: bold
  • number: yellow
  • regexp: red
  • special: cyan (예: Proxies)
  • string: green
  • symbol: green
  • undefined: grey

색상 스타일 지정은 모든 터미널에서 지원되지 않을 수 있는 ANSI 제어 코드를 사용합니다. 색상 지원을 확인하려면 tty.hasColors()를 사용하세요.

미리 정의된 제어 코드는 아래에 나열되어 있습니다("수정자", "전경색" 및 "배경색"으로 그룹화됨).

수정자

수정자 지원은 터미널마다 다릅니다. 지원되지 않는 경우 대부분 무시됩니다.

  • reset - 모든 (색상) 수정자를 기본값으로 재설정합니다.
  • bold - 텍스트를 굵게 만듭니다.
  • italic - 텍스트를 기울임꼴로 만듭니다.
  • underline - 텍스트에 밑줄을 긋습니다.
  • strikethrough - 텍스트 중앙에 가로선을 넣습니다(별칭: strikeThrough, crossedout, crossedOut).
  • hidden - 텍스트를 인쇄하지만 보이지 않게 만듭니다(별칭: 숨기기).
  • dim - 색상 강도를 낮춥니다(별칭: faint).
  • overlined - 텍스트에 오버라인을 만듭니다.
  • blink - 일정한 간격으로 텍스트를 숨겼다 표시합니다.
  • inverse - 전경색과 배경색을 바꿉니다(별칭: swapcolors, swapColors).
  • doubleunderline - 텍스트에 이중 밑줄을 만듭니다(별칭: doubleUnderline).
  • framed - 텍스트 주위에 프레임을 그립니다.

전경색

  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • white
  • gray (별칭: grey, blackBright)
  • redBright
  • greenBright
  • yellowBright
  • blueBright
  • magentaBright
  • cyanBright
  • whiteBright

배경색

  • bgBlack
  • bgRed
  • bgGreen
  • bgYellow
  • bgBlue
  • bgMagenta
  • bgCyan
  • bgWhite
  • bgGray (별칭: bgGrey, bgBlackBright)
  • bgRedBright
  • bgGreenBright
  • bgYellowBright
  • bgBlueBright
  • bgMagentaBright
  • bgCyanBright
  • bgWhiteBright

객체에 대한 사용자 정의 검사 함수

[기록]

버전변경 사항
v17.3.0, v16.14.0inspect 인수가 상호 운용성을 높이기 위해 추가되었습니다.
v0.1.97추가됨: v0.1.97

객체는 자체 [util.inspect.custom](depth, opts, inspect) 함수를 정의할 수도 있습니다. 이 함수는 util.inspect()가 객체를 검사할 때 호출하고 그 결과를 사용합니다.

js
const util = require('node:util')

class Box {
  constructor(value) {
    this.value = value
  }

  [util.inspect.custom](depth, options, inspect) {
    if (depth < 0) {
      return options.stylize('[Box]', 'special')
    }

    const newOptions = Object.assign({}, options, {
      depth: options.depth === null ? null : options.depth - 1,
    })

    // "Box< "의 크기이기 때문에 5개의 공백으로 패딩합니다.
    const padding = ' '.repeat(5)
    const inner = inspect(this.value, newOptions).replace(/\n/g, `\n${padding}`)
    return `${options.stylize('Box', 'special')}< ${inner} >`
  }
}

const box = new Box(true)

util.inspect(box)
// 반환 값: "Box< true >"

사용자 정의 [util.inspect.custom](depth, opts, inspect) 함수는 일반적으로 문자열을 반환하지만 util.inspect()에서 적절하게 포맷할 모든 유형의 값을 반환할 수 있습니다.

js
const util = require('node:util')

const obj = { foo: '이것은 inspect() 출력에 표시되지 않습니다.' }
obj[util.inspect.custom] = depth => {
  return { bar: 'baz' }
}

util.inspect(obj)
// 반환 값: "{ bar: 'baz' }"

util.inspect.custom

[기록]

버전변경 사항
v10.12.0이제 이것은 공유 심볼로 정의됩니다.
v6.6.0추가됨: v6.6.0
  • 사용자 정의 검사 함수를 선언하는 데 사용할 수 있는 <symbol>.

util.inspect.custom을 통해 접근할 수 있는 것 외에도 이 심볼은 전역적으로 등록되어 있으며 Symbol.for('nodejs.util.inspect.custom')으로 모든 환경에서 접근할 수 있습니다.

이렇게 하면 코드를 이식 가능한 방식으로 작성할 수 있으므로 사용자 정의 검사 함수는 Node.js 환경에서 사용되고 브라우저에서는 무시됩니다. util.inspect() 함수 자체는 추가 이식성을 위해 사용자 정의 검사 함수에 세 번째 인수로 전달됩니다.

js
const customInspectSymbol = Symbol.for('nodejs.util.inspect.custom')

class Password {
  constructor(value) {
    this.value = value
  }

  toString() {
    return 'xxxxxxxx'
  }

  [customInspectSymbol](depth, inspectOptions, inspect) {
    return `Password <${this.toString()}>`
  }
}

const password = new Password('r0sebud')
console.log(password)
// 출력: Password <xxxxxxxx>

자세한 내용은 객체에 대한 사용자 정의 검사 함수를 참조하세요.

util.inspect.defaultOptions

추가된 버전: v6.4.0

defaultOptions 값은 util.inspect에서 사용되는 기본 옵션을 사용자 정의할 수 있도록 합니다. 이는 암시적으로 util.inspect를 호출하는 console.log 또는 util.format과 같은 함수에 유용합니다. 이는 하나 이상의 유효한 util.inspect() 옵션이 포함된 객체로 설정해야 합니다. 옵션 속성을 직접 설정하는 것도 지원됩니다.

js
const util = require('node:util')
const arr = Array(101).fill(0)

console.log(arr) // 잘린 배열을 기록합니다
util.inspect.defaultOptions.maxArrayLength = null
console.log(arr) // 전체 배열을 기록합니다

util.isDeepStrictEqual(val1, val2)

추가된 버전: v9.0.0

val1val2 사이에 깊은 엄격한 동등성이 있으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

깊은 엄격한 동등성에 대한 자세한 내용은 assert.deepStrictEqual()을 참조하십시오.

Class: util.MIMEType

추가된 버전: v19.1.0, v18.13.0

[안정성: 1 - 실험적]

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

MIMEType 클래스의 구현입니다.

브라우저 규칙에 따라 MIMEType 객체의 모든 속성은 객체 자체의 데이터 속성이 아니라 클래스 프로토타입의 getter 및 setter로 구현됩니다.

MIME 문자열은 여러 개의 의미있는 구성 요소를 포함하는 구조화된 문자열입니다. 구문 분석되면 이러한 각 구성 요소에 대한 속성을 포함하는 MIMEType 객체가 반환됩니다.

생성자: new MIMEType(input)

  • input <string> 구문 분석할 입력 MIME

input을 구문 분석하여 새로운 MIMEType 객체를 만듭니다.

js
import { MIMEType } from 'node:util'

const myMIME = new MIMEType('text/plain')
js
const { MIMEType } = require('node:util')

const myMIME = new MIMEType('text/plain')

input이 유효한 MIME이 아니면 TypeError가 발생합니다. 주어진 값을 문자열로 강제 변환하려는 노력이 이루어집니다. 예를 들어:

js
import { MIMEType } from 'node:util'
const myMIME = new MIMEType({ toString: () => 'text/plain' })
console.log(String(myMIME))
// 출력: text/plain
js
const { MIMEType } = require('node:util')
const myMIME = new MIMEType({ toString: () => 'text/plain' })
console.log(String(myMIME))
// 출력: text/plain

mime.type

MIME의 type 부분을 가져오고 설정합니다.

js
import { MIMEType } from 'node:util'

const myMIME = new MIMEType('text/javascript')
console.log(myMIME.type)
// Prints: text
myMIME.type = 'application'
console.log(myMIME.type)
// Prints: application
console.log(String(myMIME))
// Prints: application/javascript
js
const { MIMEType } = require('node:util')

const myMIME = new MIMEType('text/javascript')
console.log(myMIME.type)
// Prints: text
myMIME.type = 'application'
console.log(myMIME.type)
// Prints: application
console.log(String(myMIME))
// Prints: application/javascript

mime.subtype

MIME의 subtype 부분을 가져오고 설정합니다.

js
import { MIMEType } from 'node:util'

const myMIME = new MIMEType('text/ecmascript')
console.log(myMIME.subtype)
// Prints: ecmascript
myMIME.subtype = 'javascript'
console.log(myMIME.subtype)
// Prints: javascript
console.log(String(myMIME))
// Prints: text/javascript
js
const { MIMEType } = require('node:util')

const myMIME = new MIMEType('text/ecmascript')
console.log(myMIME.subtype)
// Prints: ecmascript
myMIME.subtype = 'javascript'
console.log(myMIME.subtype)
// Prints: javascript
console.log(String(myMIME))
// Prints: text/javascript

mime.essence

MIME의 essence를 가져옵니다. 이 속성은 읽기 전용입니다. MIME을 변경하려면 mime.type 또는 mime.subtype을 사용하세요.

js
import { MIMEType } from 'node:util'

const myMIME = new MIMEType('text/javascript;key=value')
console.log(myMIME.essence)
// Prints: text/javascript
myMIME.type = 'application'
console.log(myMIME.essence)
// Prints: application/javascript
console.log(String(myMIME))
// Prints: application/javascript;key=value
js
const { MIMEType } = require('node:util')

const myMIME = new MIMEType('text/javascript;key=value')
console.log(myMIME.essence)
// Prints: text/javascript
myMIME.type = 'application'
console.log(myMIME.essence)
// Prints: application/javascript
console.log(String(myMIME))
// Prints: application/javascript;key=value

mime.params

MIME의 매개변수를 나타내는 MIMEParams 객체를 가져옵니다. 이 속성은 읽기 전용입니다. 자세한 내용은 MIMEParams 문서를 참조하세요.

mime.toString()

MIMEType 객체의 toString() 메서드는 직렬화된 MIME을 반환합니다.

표준 준수의 필요성으로 인해 이 메서드는 사용자가 MIME의 직렬화 프로세스를 사용자 지정할 수 없습니다.

mime.toJSON()

mime.toString()의 별칭입니다.

이 메서드는 MIMEType 객체가 JSON.stringify()로 직렬화될 때 자동으로 호출됩니다.

js
import { MIMEType } from 'node:util'

const myMIMES = [new MIMEType('image/png'), new MIMEType('image/gif')]
console.log(JSON.stringify(myMIMES))
// Prints: ["image/png", "image/gif"]
js
const { MIMEType } = require('node:util')

const myMIMES = [new MIMEType('image/png'), new MIMEType('image/gif')]
console.log(JSON.stringify(myMIMES))
// Prints: ["image/png", "image/gif"]

클래스: util.MIMEParams

추가된 버전: v19.1.0, v18.13.0

MIMEParams API는 MIMEType의 매개변수에 대한 읽기 및 쓰기 액세스를 제공합니다.

생성자: new MIMEParams()

빈 매개변수로 새 MIMEParams 객체를 만듭니다.

js
import { MIMEParams } from 'node:util'

const myParams = new MIMEParams()
js
const { MIMEParams } = require('node:util')

const myParams = new MIMEParams()

mimeParams.delete(name)

이름이 name인 모든 이름-값 쌍을 제거합니다.

mimeParams.entries()

매개변수 내 각 이름-값 쌍에 대한 이터레이터를 반환합니다. 이터레이터의 각 항목은 JavaScript Array입니다. 배열의 첫 번째 항목은 name이고, 두 번째 항목은 value입니다.

mimeParams.get(name)

  • name <string>
  • 반환값: <string> | <null> 주어진 name을 가진 이름-값 쌍이 없는 경우 문자열 또는 null입니다.

이름이 name인 첫 번째 이름-값 쌍의 값을 반환합니다. 그러한 쌍이 없으면 null이 반환됩니다.

mimeParams.has(name)

이름이 name인 이름-값 쌍이 하나 이상 있으면 true를 반환합니다.

mimeParams.keys()

각 이름-값 쌍의 이름에 대한 이터레이터를 반환합니다.

js
import { MIMEType } from 'node:util'

const { params } = new MIMEType('text/plain;foo=0;bar=1')
for (const name of params.keys()) {
  console.log(name)
}
// 출력:
//   foo
//   bar
js
const { MIMEType } = require('node:util')

const { params } = new MIMEType('text/plain;foo=0;bar=1')
for (const name of params.keys()) {
  console.log(name)
}
// 출력:
//   foo
//   bar

mimeParams.set(name, value)

name과 연결된 MIMEParams 객체의 값을 value로 설정합니다. 이름이 name인 기존의 이름-값 쌍이 있으면, 첫 번째 쌍의 값을 value로 설정합니다.

js
import { MIMEType } from 'node:util'

const { params } = new MIMEType('text/plain;foo=0;bar=1')
params.set('foo', 'def')
params.set('baz', 'xyz')
console.log(params.toString())
// 출력: foo=def;bar=1;baz=xyz
js
const { MIMEType } = require('node:util')

const { params } = new MIMEType('text/plain;foo=0;bar=1')
params.set('foo', 'def')
params.set('baz', 'xyz')
console.log(params.toString())
// 출력: foo=def;bar=1;baz=xyz

mimeParams.values()

각 이름-값 쌍의 값에 대한 이터레이터를 반환합니다.

mimeParams[@@iterator]()

mimeParams.entries()의 별칭입니다.

js
import { MIMEType } from 'node:util'

const { params } = new MIMEType('text/plain;foo=bar;xyz=baz')
for (const [name, value] of params) {
  console.log(name, value)
}
// 출력:
//   foo bar
//   xyz baz
js
const { MIMEType } = require('node:util')

const { params } = new MIMEType('text/plain;foo=bar;xyz=baz')
for (const [name, value] of params) {
  console.log(name, value)
}
// 출력:
//   foo bar
//   xyz baz

util.parseArgs([config])

[기록]

버전변경 사항
v22.4.0, v20.16.0입력 config에서 음수 옵션 허용에 대한 지원을 추가했습니다.
v20.0.0API가 더 이상 실험적이지 않습니다.
v18.11.0, v16.19.0입력 config에 기본값에 대한 지원을 추가했습니다.
v18.7.0, v16.17.0입력 config 및 반환된 속성에서 tokens를 사용하여 자세한 구문 분석 정보를 반환하는 데 대한 지원을 추가했습니다.
v18.3.0, v16.17.0추가됨: v18.3.0, v16.17.0
  • config <Object> 구문 분석에 대한 인수를 제공하고 구문 분석기를 구성하는 데 사용됩니다. config는 다음 속성을 지원합니다.
    • args <string[]> 인수 문자열의 배열. 기본값: execPathfilename이 제거된 process.argv.
    • options <Object> 구문 분석기에 알려진 인수를 설명하는 데 사용됩니다. options의 키는 옵션의 긴 이름이고 값은 다음 속성을 허용하는 <Object>입니다.
    • type <string> 인수의 유형으로 boolean 또는 string이어야 합니다.
    • multiple <boolean> 이 옵션을 여러 번 제공할 수 있는지 여부. true인 경우 모든 값이 배열에 수집됩니다. false인 경우 옵션 값은 마지막 값이 우선합니다. 기본값: false.
    • short <string> 옵션에 대한 단일 문자 별칭.
    • default <string> | <boolean> | <string[]> | <boolean[]> 인수로 설정되지 않은 경우의 기본 옵션 값입니다. type 속성과 동일한 유형이어야 합니다. multipletrue인 경우 배열이어야 합니다.
    • strict <boolean> 알 수 없는 인수가 발생하거나 options에 구성된 type과 일치하지 않는 인수가 전달될 때 오류를 발생시켜야 하는지 여부입니다. 기본값: true.
    • allowPositionals <boolean> 이 명령이 위치 인수를 허용하는지 여부입니다. stricttrue인 경우 기본값: false, 그렇지 않으면 true.
    • allowNegative <boolean> true인 경우 옵션 이름 앞에 --no-를 붙여 부울 옵션을 false로 명시적으로 설정할 수 있습니다. 기본값: false.
    • tokens <boolean> 구문 분석된 토큰을 반환합니다. 이는 추가 검사를 추가하는 것부터 토큰을 다른 방식으로 재처리하는 것까지 내장된 동작을 확장하는 데 유용합니다. 기본값: false.
  • 반환값: <Object> 구문 분석된 명령줄 인수:

process.argv와 직접 상호 작용하는 것보다 명령줄 인수 구문 분석을 위한 더 높은 수준의 API를 제공합니다. 예상 인수에 대한 사양을 가져와 구문 분석된 옵션과 위치를 포함하는 구조화된 객체를 반환합니다.

js
import { parseArgs } from 'node:util'
const args = ['-f', '--bar', 'b']
const options = {
  foo: {
    type: 'boolean',
    short: 'f',
  },
  bar: {
    type: 'string',
  },
}
const { values, positionals } = parseArgs({ args, options })
console.log(values, positionals)
// 출력: [Object: null prototype] { foo: true, bar: 'b' } []
js
const { parseArgs } = require('node:util')
const args = ['-f', '--bar', 'b']
const options = {
  foo: {
    type: 'boolean',
    short: 'f',
  },
  bar: {
    type: 'string',
  },
}
const { values, positionals } = parseArgs({ args, options })
console.log(values, positionals)
// 출력: [Object: null prototype] { foo: true, bar: 'b' } []

parseArgs 토큰

구성에서 tokens: true를 지정하여 사용자 정의 동작을 추가하는 데 사용할 수 있는 자세한 구문 분석 정보가 제공됩니다. 반환된 토큰에는 다음을 설명하는 속성이 있습니다.

  • 모든 토큰

    • kind <string> 'option', 'positional' 또는 'option-terminator' 중 하나입니다.
    • index <number> 토큰을 포함하는 args의 요소 인덱스입니다. 따라서 토큰의 소스 인수는 args[token.index]입니다.
  • 옵션 토큰

    • name <string> 옵션의 긴 이름입니다.
    • rawName <string> --foo-f와 같이 args에서 사용된 옵션입니다.
    • value <string> | <undefined> args에 지정된 옵션 값입니다. 부울 옵션의 경우 정의되지 않습니다.
    • inlineValue <boolean> | <undefined> --foo=bar와 같이 옵션 값이 인라인으로 지정되었는지 여부입니다.
  • 위치 토큰

    • value <string> args의 위치 인수의 값입니다(예: args[index]).
  • 옵션 종료자 토큰

반환된 토큰은 입력 args에서 발견된 순서대로 정렬됩니다. args에 여러 번 나타나는 옵션은 각 사용에 대해 토큰을 생성합니다. -xy와 같은 짧은 옵션 그룹은 각 옵션에 대한 토큰으로 확장됩니다. 따라서 -xxx는 세 개의 토큰을 생성합니다.

예를 들어 --no-color와 같은 부정된 옵션(옵션이 boolean 유형일 때 allowNegative가 지원함)에 대한 지원을 추가하려면 반환된 토큰을 다시 처리하여 부정된 옵션에 대해 저장된 값을 변경할 수 있습니다.

js
import { parseArgs } from 'node:util'

const options = {
  color: { type: 'boolean' },
  'no-color': { type: 'boolean' },
  logfile: { type: 'string' },
  'no-logfile': { type: 'boolean' },
}
const { values, tokens } = parseArgs({ options, tokens: true })

// 옵션 토큰을 다시 처리하고 반환된 값을 덮어씁니다.
tokens
  .filter(token => token.kind === 'option')
  .forEach(token => {
    if (token.name.startsWith('no-')) {
      // --no-foo에 대해 foo:false를 저장합니다.
      const positiveName = token.name.slice(3)
      values[positiveName] = false
      delete values[token.name]
    } else {
      // --foo 및 --no-foo 둘 다 있는 경우 마지막 항목이 우선되도록 값을 다시 저장합니다.
      values[token.name] = token.value ?? true
    }
  })

const color = values.color
const logfile = values.logfile ?? 'default.log'

console.log({ logfile, color })
js
const { parseArgs } = require('node:util')

const options = {
  color: { type: 'boolean' },
  'no-color': { type: 'boolean' },
  logfile: { type: 'string' },
  'no-logfile': { type: 'boolean' },
}
const { values, tokens } = parseArgs({ options, tokens: true })

// 옵션 토큰을 다시 처리하고 반환된 값을 덮어씁니다.
tokens
  .filter(token => token.kind === 'option')
  .forEach(token => {
    if (token.name.startsWith('no-')) {
      // --no-foo에 대해 foo:false를 저장합니다.
      const positiveName = token.name.slice(3)
      values[positiveName] = false
      delete values[token.name]
    } else {
      // --foo 및 --no-foo 둘 다 있는 경우 마지막 항목이 우선되도록 값을 다시 저장합니다.
      values[token.name] = token.value ?? true
    }
  })

const color = values.color
const logfile = values.logfile ?? 'default.log'

console.log({ logfile, color })

부정된 옵션과 옵션을 여러 가지 방법으로 사용하는 경우 마지막 항목이 우선되는 예시 사용법입니다.

bash
$ node negate.js
{ logfile: 'default.log', color: undefined }
$ node negate.js --no-logfile --no-color
{ logfile: false, color: false }
$ node negate.js --logfile=test.log --color
{ logfile: 'test.log', color: true }
$ node negate.js --no-logfile --logfile=test.log --color --no-color
{ logfile: 'test.log', color: false }

util.parseEnv(content)

[Stable: 1 - Experimental]

Stable: 1 안정성: 1.1 - 활발한 개발

추가된 버전: v21.7.0, v20.12.0

.env 파일의 원시 내용입니다.

다음과 같은 .env 파일 예시가 주어졌을 때:

js
const { parseEnv } = require('node:util')

parseEnv('HELLO=world\nHELLO=oh my\n')
// 반환값: { HELLO: 'oh my' }
js
import { parseEnv } from 'node:util'

parseEnv('HELLO=world\nHELLO=oh my\n')
// 반환값: { HELLO: 'oh my' }

util.promisify(original)

[History]

버전변경 사항
v20.8.0Promise를 반환하는 함수에서 promisify를 호출하는 것은 더 이상 사용되지 않습니다.
v8.0.0추가된 버전: v8.0.0

일반적인 오류 우선 콜백 스타일, 즉 마지막 인수로 (err, value) => ... 콜백을 사용하는 함수를 받아들이고 프라미스를 반환하는 버전으로 반환합니다.

js
const util = require('node:util')
const fs = require('node:fs')

const stat = util.promisify(fs.stat)
stat('.')
  .then(stats => {
    // `stats`로 무언가를 수행합니다.
  })
  .catch(error => {
    // 오류를 처리합니다.
  })

또는 async function을 사용하여 동등하게 표현할 수 있습니다.

js
const util = require('node:util')
const fs = require('node:fs')

const stat = util.promisify(fs.stat)

async function callStat() {
  const stats = await stat('.')
  console.log(`이 디렉터리는 ${stats.uid} 소유입니다.`)
}

callStat()

original[util.promisify.custom] 속성이 있는 경우, promisify는 해당 값을 반환합니다. 사용자 정의 프로미스화 함수를 참조하십시오.

promisify()는 모든 경우에 original이 마지막 인수로 콜백을 사용하는 함수라고 가정합니다. original이 함수가 아니면 promisify()는 오류를 발생시킵니다. original이 함수이지만 마지막 인수가 오류 우선 콜백이 아닌 경우에도 오류 우선 콜백이 마지막 인수로 전달됩니다.

this를 사용하는 클래스 메서드 또는 다른 메서드에서 promisify()를 사용하는 것은 특별히 처리하지 않는 한 예상대로 작동하지 않을 수 있습니다.

js
const util = require('node:util')

class Foo {
  constructor() {
    this.a = 42
  }

  bar(callback) {
    callback(null, this.a)
  }
}

const foo = new Foo()

const naiveBar = util.promisify(foo.bar)
// TypeError: 정의되지 않은 속성 'a'를 읽을 수 없습니다.
// naiveBar().then(a => console.log(a));

naiveBar.call(foo).then(a => console.log(a)) // '42'

const bindBar = naiveBar.bind(foo)
bindBar().then(a => console.log(a)) // '42'

사용자 정의 프로미스화 함수

util.promisify.custom 심볼을 사용하여 util.promisify()의 반환 값을 오버라이드할 수 있습니다.

js
const util = require('node:util')

function doSomething(foo, callback) {
  // ...
}

doSomething[util.promisify.custom] = foo => {
  return getPromiseSomehow()
}

const promisified = util.promisify(doSomething)
console.log(promisified === doSomething[util.promisify.custom])
// 'true'를 출력합니다.

이는 원래 함수가 오류 우선 콜백을 마지막 인수로 사용하는 표준 형식을 따르지 않는 경우에 유용할 수 있습니다.

예를 들어 (foo, onSuccessCallback, onErrorCallback)을 인수로 사용하는 함수의 경우:

js
doSomething[util.promisify.custom] = foo => {
  return new Promise((resolve, reject) => {
    doSomething(foo, resolve, reject)
  })
}

promisify.custom이 정의되어 있지만 함수가 아닌 경우, promisify()는 오류를 발생시킵니다.

util.promisify.custom

[히스토리]

버전변경 사항
v13.12.0, v12.16.2이제 공유 심볼로 정의됩니다.
v8.0.0v8.0.0에서 추가됨

util.promisify.custom을 통해 액세스할 수 있을 뿐만 아니라 이 심볼은 전역적으로 등록되어 있으며 모든 환경에서 Symbol.for('nodejs.util.promisify.custom')으로 액세스할 수 있습니다.

예를 들어 (foo, onSuccessCallback, onErrorCallback)을 인수로 사용하는 함수의 경우:

js
const kCustomPromisifiedSymbol = Symbol.for('nodejs.util.promisify.custom')

doSomething[kCustomPromisifiedSymbol] = foo => {
  return new Promise((resolve, reject) => {
    doSomething(foo, resolve, reject)
  })
}

util.stripVTControlCharacters(str)

추가된 버전: v16.11.0

str에서 모든 ANSI 이스케이프 코드를 제거한 값을 반환합니다.

js
console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m'))
// "value" 출력

util.styleText(format, text[, options])

[안정성: 2 - 안정적]

안정성: 2 안정성: 2 - 안정적입니다.

[기록]

버전변경 사항
v23.5.0styleText가 이제 안정화되었습니다.
v22.8.0, v20.18.0isTTY 및 NO_COLORS, NODE_DISABLE_COLORS, FORCE_COLOR와 같은 환경 변수를 고려합니다.
v21.7.0, v20.12.0추가됨: v21.7.0, v20.12.0
  • format <string> | <Array> util.inspect.colors에 정의된 텍스트 형식 또는 텍스트 형식의 배열입니다.
  • text <string> 서식을 지정할 텍스트입니다.
  • options <Object>
    • validateStream <boolean> true인 경우, stream이 색상을 처리할 수 있는지 확인합니다. 기본값: true.
    • stream <Stream> 색상 적용 가능성을 검증할 스트림입니다. 기본값: process.stdout.

이 함수는 터미널에 출력할 때 전달된 format을 고려하여 서식이 지정된 텍스트를 반환합니다. 터미널의 기능을 인식하고 NO_COLORS, NODE_DISABLE_COLORS, FORCE_COLOR 환경 변수를 통해 설정된 구성에 따라 작동합니다.

js
import { styleText } from 'node:util'
import { stderr } from 'node:process'

const successMessage = styleText('green', '성공!')
console.log(successMessage)

const errorMessage = styleText(
  'red',
  '오류! 오류!',
  // process.stderr에 TTY가 있는지 확인
  { stream: stderr }
)
console.error(successMessage)
js
const { styleText } = require('node:util')
const { stderr } = require('node:process')

const successMessage = styleText('green', '성공!')
console.log(successMessage)

const errorMessage = styleText(
  'red',
  '오류! 오류!',
  // process.stderr에 TTY가 있는지 확인
  { stream: stderr }
)
console.error(successMessage)

util.inspect.colorsitalicunderline과 같은 텍스트 형식도 제공하며 둘 다 결합할 수 있습니다.

js
console.log(util.styleText(['underline', 'italic'], '내 이탤릭체 밑줄 메시지'))

형식 배열을 전달할 때, 적용되는 형식의 순서는 왼쪽에서 오른쪽이므로 다음 스타일은 이전 스타일을 덮어쓸 수 있습니다.

js
console.log(
  util.styleText(['red', 'green'], '텍스트') // 녹색
)

전체 형식 목록은 수정자에서 확인할 수 있습니다.

클래스: util.TextDecoder

[기록]

버전변경 사항
v11.0.0이제 클래스를 전역 객체에서 사용할 수 있습니다.
v8.3.0v8.3.0에 추가됨

WHATWG 인코딩 표준 TextDecoder API의 구현입니다.

js
const decoder = new TextDecoder()
const u8arr = new Uint8Array([72, 101, 108, 108, 111])
console.log(decoder.decode(u8arr)) // Hello

WHATWG 지원 인코딩

WHATWG 인코딩 표준에 따라 TextDecoder API에서 지원하는 인코딩은 아래 표에 나와 있습니다. 각 인코딩에 대해 하나 이상의 별칭을 사용할 수 있습니다.

Node.js 빌드 구성에 따라 지원하는 인코딩 집합이 다릅니다. (국제화 참조)

기본적으로 지원되는 인코딩(전체 ICU 데이터 포함)

인코딩별칭
'ibm866''866' , 'cp866' , 'csibm866'
'iso-8859-2''csisolatin2' , 'iso-ir-101' , 'iso8859-2' , 'iso88592' , 'iso_8859-2' , 'iso_8859-2:1987' , 'l2' , 'latin2'
'iso-8859-3''csisolatin3' , 'iso-ir-109' , 'iso8859-3' , 'iso88593' , 'iso_8859-3' , 'iso_8859-3:1988' , 'l3' , 'latin3'
'iso-8859-4''csisolatin4' , 'iso-ir-110' , 'iso8859-4' , 'iso88594' , 'iso_8859-4' , 'iso_8859-4:1988' , 'l4' , 'latin4'
'iso-8859-5''csisolatincyrillic' , 'cyrillic' , 'iso-ir-144' , 'iso8859-5' , 'iso88595' , 'iso_8859-5' , 'iso_8859-5:1988'
'iso-8859-6''arabic' , 'asmo-708' , 'csiso88596e' , 'csiso88596i' , 'csisolatinarabic' , 'ecma-114' , 'iso-8859-6-e' , 'iso-8859-6-i' , 'iso-ir-127' , 'iso8859-6' , 'iso88596' , 'iso_8859-6' , 'iso_8859-6:1987'
'iso-8859-7''csisolatingreek' , 'ecma-118' , 'elot_928' , 'greek' , 'greek8' , 'iso-ir-126' , 'iso8859-7' , 'iso88597' , 'iso_8859-7' , 'iso_8859-7:1987' , 'sun_eu_greek'
'iso-8859-8''csiso88598e' , 'csisolatinhebrew' , 'hebrew' , 'iso-8859-8-e' , 'iso-ir-138' , 'iso8859-8' , 'iso88598' , 'iso_8859-8' , 'iso_8859-8:1988' , 'visual'
'iso-8859-8-i''csiso88598i' , 'logical'
'iso-8859-10''csisolatin6' , 'iso-ir-157' , 'iso8859-10' , 'iso885910' , 'l6' , 'latin6'
'iso-8859-13''iso8859-13' , 'iso885913'
'iso-8859-14''iso8859-14' , 'iso885914'
'iso-8859-15''csisolatin9' , 'iso8859-15' , 'iso885915' , 'iso_8859-15' , 'l9'
'koi8-r''cskoi8r' , 'koi' , 'koi8' , 'koi8_r'
'koi8-u''koi8-ru'
'macintosh''csmacintosh' , 'mac' , 'x-mac-roman'
'windows-874''dos-874' , 'iso-8859-11' , 'iso8859-11' , 'iso885911' , 'tis-620'
'windows-1250''cp1250' , 'x-cp1250'
'windows-1251''cp1251' , 'x-cp1251'
'windows-1252''ansi_x3.4-1968' , 'ascii' , 'cp1252' , 'cp819' , 'csisolatin1' , 'ibm819' , 'iso-8859-1' , 'iso-ir-100' , 'iso8859-1' , 'iso88591' , 'iso_8859-1' , 'iso_8859-1:1987' , 'l1' , 'latin1' , 'us-ascii' , 'x-cp1252'
'windows-1253''cp1253' , 'x-cp1253'
'windows-1254''cp1254' , 'csisolatin5' , 'iso-8859-9' , 'iso-ir-148' , 'iso8859-9' , 'iso88599' , 'iso_8859-9' , 'iso_8859-9:1989' , 'l5' , 'latin5' , 'x-cp1254'
'windows-1255''cp1255' , 'x-cp1255'
'windows-1256''cp1256' , 'x-cp1256'
'windows-1257''cp1257' , 'x-cp1257'
'windows-1258''cp1258' , 'x-cp1258'
'x-mac-cyrillic''x-mac-ukrainian'
'gbk''chinese' , 'csgb2312' , 'csiso58gb231280' , 'gb2312' , 'gb_2312' , 'gb_2312-80' , 'iso-ir-58' , 'x-gbk'
'gb18030'
'big5''big5-hkscs' , 'cn-big5' , 'csbig5' , 'x-x-big5'
'euc-jp''cseucpkdfmtjapanese' , 'x-euc-jp'
'iso-2022-jp''csiso2022jp'
'shift_jis''csshiftjis' , 'ms932' , 'ms_kanji' , 'shift-jis' , 'sjis' , 'windows-31j' , 'x-sjis'
'euc-kr''cseuckr' , 'csksc56011987' , 'iso-ir-149' , 'korean' , 'ks_c_5601-1987' , 'ks_c_5601-1989' , 'ksc5601' , 'ksc_5601' , 'windows-949'

Node.js가 small-icu 옵션으로 빌드될 때 지원되는 인코딩

인코딩별칭
'utf-8''unicode-1-1-utf-8' , 'utf8'
'utf-16le''utf-16'
'utf-16be'

ICU가 비활성화되었을 때 지원되는 인코딩

인코딩별칭
'utf-8''unicode-1-1-utf-8' , 'utf8'
'utf-16le''utf-16'

WHATWG 인코딩 표준에 나열된 'iso-8859-16' 인코딩은 지원되지 않습니다.

new TextDecoder([encoding[, options]])

  • encoding <string>TextDecoder 인스턴스가 지원하는 encoding을 식별합니다. 기본값: 'utf-8'.
  • options <Object>
    • fatal <boolean> 디코딩 실패가 치명적인 경우 true입니다. 이 옵션은 ICU가 비활성화된 경우 지원되지 않습니다( 국제화 참조). 기본값: false.
    • ignoreBOM <boolean> true이면 TextDecoder는 디코딩된 결과에 바이트 순서 표시를 포함합니다. false이면 바이트 순서 표시가 출력에서 제거됩니다. 이 옵션은 encoding'utf-8', 'utf-16be', 또는 'utf-16le'인 경우에만 사용됩니다. 기본값: false.

새로운 TextDecoder 인스턴스를 만듭니다. encoding은 지원되는 인코딩 또는 별칭 중 하나를 지정할 수 있습니다.

TextDecoder 클래스는 전역 객체에서도 사용할 수 있습니다.

textDecoder.decode([input[, options]])

input을 디코딩하고 문자열을 반환합니다. options.streamtrue이면 input 끝에서 발생하는 불완전한 바이트 시퀀스는 내부적으로 버퍼링되고 textDecoder.decode()를 다음 번 호출한 후에 방출됩니다.

textDecoder.fataltrue이면 발생하는 디코딩 오류로 인해 TypeError가 발생합니다.

textDecoder.encoding

TextDecoder 인스턴스에서 지원하는 인코딩입니다.

textDecoder.fatal

디코딩 오류로 인해 TypeError가 발생하면 값은 true입니다.

textDecoder.ignoreBOM

디코딩 결과에 바이트 순서 표시가 포함되면 값은 true입니다.

Class: util.TextEncoder

[기록]

버전변경 사항
v11.0.0클래스가 이제 전역 객체에서 사용 가능합니다.
v8.3.0추가됨: v8.3.0

WHATWG 인코딩 표준 TextEncoder API의 구현입니다. 모든 TextEncoder 인스턴스는 UTF-8 인코딩만 지원합니다.

js
const encoder = new TextEncoder()
const uint8array = encoder.encode('this is some data')

TextEncoder 클래스는 전역 객체에서도 사용할 수 있습니다.

textEncoder.encode([input])

  • input <string> 인코딩할 텍스트입니다. 기본값: 빈 문자열입니다.
  • 반환 값: <Uint8Array>

input 문자열을 UTF-8로 인코딩하고 인코딩된 바이트를 포함하는 Uint8Array를 반환합니다.

textEncoder.encodeInto(src, dest)

추가됨: v12.11.0

  • src <string> 인코딩할 텍스트입니다.
  • dest <Uint8Array> 인코딩 결과를 저장할 배열입니다.
  • 반환 값: <Object>
    • read <number> src에서 읽은 유니코드 코드 단위입니다.
    • written <number> dest에 기록된 UTF-8 바이트입니다.

src 문자열을 dest Uint8Array로 UTF-8로 인코딩하고 읽은 유니코드 코드 단위와 기록된 UTF-8 바이트를 포함하는 객체를 반환합니다.

js
const encoder = new TextEncoder()
const src = 'this is some data'
const dest = new Uint8Array(10)
const { read, written } = encoder.encodeInto(src, dest)

textEncoder.encoding

TextEncoder 인스턴스에서 지원하는 인코딩입니다. 항상 'utf-8'로 설정됩니다.

util.toUSVString(string)

추가된 버전: v16.8.0, v14.18.0

서로게이트 코드 포인트(또는 동등하게, 쌍을 이루지 않은 서로게이트 코드 유닛)를 유니코드 "교체 문자" U+FFFD로 바꾼 후의 string을 반환합니다.

util.transferableAbortController()

추가된 버전: v18.11.0

[안정성: 1 - 실험적]

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

<AbortController> 인스턴스를 생성하고 반환합니다. 해당 인스턴스의 <AbortSignal>은 전송 가능으로 표시되어 structuredClone() 또는 postMessage()와 함께 사용할 수 있습니다.

util.transferableAbortSignal(signal)

추가된 버전: v18.11.0

[안정성: 1 - 실험적]

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

주어진 <AbortSignal>을 전송 가능으로 표시하여 structuredClone()postMessage()와 함께 사용할 수 있도록 합니다.

js
const signal = transferableAbortSignal(AbortSignal.timeout(100))
const channel = new MessageChannel()
channel.port2.postMessage(signal, [signal])

util.aborted(signal, resource)

추가된 버전: v19.7.0, v18.16.0

[안정성: 1 - 실험적]

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

  • signal <AbortSignal>
  • resource <Object> 중단 가능한 작업과 연결되어 있고 약하게 유지되는 null이 아닌 모든 객체입니다. resourcesignal이 중단되기 전에 가비지 컬렉션되면 프로미스는 보류 중인 상태로 유지되어 Node.js가 해당 프로미스 추적을 중지할 수 있게 합니다. 이는 장기 실행되거나 취소 불가능한 작업에서 메모리 누수를 방지하는 데 도움이 됩니다.
  • 반환: <Promise>

제공된 signal에서 abort 이벤트를 수신하고 signal이 중단될 때 확인되는 프로미스를 반환합니다. resource가 제공된 경우, 작업과 연결된 객체를 약하게 참조하므로, resourcesignal이 중단되기 전에 가비지 컬렉션되면 반환된 프로미스는 보류 중인 상태로 유지됩니다. 이는 장기 실행되거나 취소 불가능한 작업에서 메모리 누수를 방지합니다.

js
const { aborted } = require('node:util')

// 사용자 정의 리소스 또는 작업과 같은 중단 가능한 신호를 가진 객체를 가져옵니다.
const dependent = obtainSomethingAbortable()

// `dependent`를 리소스로 전달하여, 프로미스가 `dependent`가 신호가 중단될 때 여전히 메모리에 있는 경우에만 확인되어야 함을 나타냅니다.
aborted(dependent.signal, dependent).then(() => {
  // 이 코드는 `dependent`가 중단될 때 실행됩니다.
  console.log('종속 리소스가 중단되었습니다.')
})

// 중단을 트리거하는 이벤트를 시뮬레이션합니다.
dependent.on('event', () => {
  dependent.abort() // 이로 인해 `aborted` 프로미스가 확인됩니다.
})
js
import { aborted } from 'node:util'

// 사용자 정의 리소스 또는 작업과 같은 중단 가능한 신호를 가진 객체를 가져옵니다.
const dependent = obtainSomethingAbortable()

// `dependent`를 리소스로 전달하여, 프로미스가 `dependent`가 신호가 중단될 때 여전히 메모리에 있는 경우에만 확인되어야 함을 나타냅니다.
aborted(dependent.signal, dependent).then(() => {
  // 이 코드는 `dependent`가 중단될 때 실행됩니다.
  console.log('종속 리소스가 중단되었습니다.')
})

// 중단을 트리거하는 이벤트를 시뮬레이션합니다.
dependent.on('event', () => {
  dependent.abort() // 이로 인해 `aborted` 프로미스가 확인됩니다.
})

util.types

[연혁]

버전변경 사항
v15.3.0require('util/types')로 노출됨.
v10.0.0v10.0.0에서 추가됨

util.types는 다양한 종류의 내장 객체에 대한 타입 검사를 제공합니다. instanceof 또는 Object.prototype.toString.call(value)와 달리 이러한 검사는 JavaScript에서 액세스할 수 있는 객체의 속성(예: 프로토타입)을 검사하지 않으며 일반적으로 C++ 호출의 오버헤드를 갖습니다.

결과는 일반적으로 값이 JavaScript에서 어떤 종류의 속성 또는 동작을 노출하는지에 대한 보증을 하지 않습니다. 주로 JavaScript에서 타입 검사를 선호하는 애드온 개발자에게 유용합니다.

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

util.types.isAnyArrayBuffer(value)

추가된 버전: v10.0.0

값이 내장된 ArrayBuffer 또는 SharedArrayBuffer 인스턴스인 경우 true를 반환합니다.

util.types.isArrayBuffer()util.types.isSharedArrayBuffer()도 참조하십시오.

js
util.types.isAnyArrayBuffer(new ArrayBuffer()) // true 반환
util.types.isAnyArrayBuffer(new SharedArrayBuffer()) // true 반환

util.types.isArrayBufferView(value)

추가된 버전: v10.0.0

값이 유형 배열 객체 또는 DataView와 같은 ArrayBuffer 뷰 중 하나의 인스턴스인 경우 true를 반환합니다. ArrayBuffer.isView()와 동일합니다.

js
util.types.isArrayBufferView(new Int8Array()) // true
util.types.isArrayBufferView(Buffer.from('hello world')) // true
util.types.isArrayBufferView(new DataView(new ArrayBuffer(16))) // true
util.types.isArrayBufferView(new ArrayBuffer()) // false

util.types.isArgumentsObject(value)

추가된 버전: v10.0.0

값이 arguments 객체이면 true를 반환합니다.

js
function foo() {
  util.types.isArgumentsObject(arguments) // true 반환
}

util.types.isArrayBuffer(value)

추가된 버전: v10.0.0

값이 내장된 ArrayBuffer 인스턴스이면 true를 반환합니다. 여기에는 SharedArrayBuffer 인스턴스는 포함되지 않습니다. 일반적으로 둘 다 테스트하는 것이 바람직합니다. 이를 위해서는 util.types.isAnyArrayBuffer()를 참조하십시오.

js
util.types.isArrayBuffer(new ArrayBuffer()) // true 반환
util.types.isArrayBuffer(new SharedArrayBuffer()) // false 반환

util.types.isAsyncFunction(value)

추가된 버전: v10.0.0

값이 async 함수이면 true를 반환합니다. 이것은 JavaScript 엔진이 보는 것만 보고합니다. 특히, 트랜스파일 도구가 사용된 경우 반환 값이 원래 소스 코드와 일치하지 않을 수 있습니다.

js
util.types.isAsyncFunction(function foo() {}) // false 반환
util.types.isAsyncFunction(async function foo() {}) // true 반환

util.types.isBigInt64Array(value)

추가된 버전: v10.0.0

값이 BigInt64Array 인스턴스이면 true를 반환합니다.

js
util.types.isBigInt64Array(new BigInt64Array()) // true 반환
util.types.isBigInt64Array(new BigUint64Array()) // false 반환

util.types.isBigIntObject(value)

추가된 버전: v10.4.0

값이 Object(BigInt(123))으로 생성된 것과 같은 BigInt 객체이면 true를 반환합니다.

js
util.types.isBigIntObject(Object(BigInt(123))) // true 반환
util.types.isBigIntObject(BigInt(123)) // false 반환
util.types.isBigIntObject(123) // false 반환

util.types.isBigUint64Array(value)

추가된 버전: v10.0.0

값이 BigUint64Array 인스턴스이면 true를 반환합니다.

js
util.types.isBigUint64Array(new BigInt64Array()) // false 반환
util.types.isBigUint64Array(new BigUint64Array()) // true 반환

util.types.isBooleanObject(value)

추가된 버전: v10.0.0

값이 new Boolean()으로 생성된 것과 같은 boolean 객체이면 true를 반환합니다.

js
util.types.isBooleanObject(false) // false 반환
util.types.isBooleanObject(true) // false 반환
util.types.isBooleanObject(new Boolean(false)) // true 반환
util.types.isBooleanObject(new Boolean(true)) // true 반환
util.types.isBooleanObject(Boolean(false)) // false 반환
util.types.isBooleanObject(Boolean(true)) // false 반환

util.types.isBoxedPrimitive(value)

추가된 버전: v10.11.0

값이 new Boolean(), new String() 또는 Object(Symbol())으로 생성된 것과 같은 박싱된 원시 객체이면 true를 반환합니다.

예시:

js
util.types.isBoxedPrimitive(false) // false 반환
util.types.isBoxedPrimitive(new Boolean(false)) // true 반환
util.types.isBoxedPrimitive(Symbol('foo')) // false 반환
util.types.isBoxedPrimitive(Object(Symbol('foo'))) // true 반환
util.types.isBoxedPrimitive(Object(BigInt(5))) // true 반환

util.types.isCryptoKey(value)

추가된 버전: v16.2.0

value<CryptoKey>이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

util.types.isDataView(value)

추가된 버전: v10.0.0

값이 내장 DataView 인스턴스이면 true를 반환합니다.

js
const ab = new ArrayBuffer(20)
util.types.isDataView(new DataView(ab)) // true 반환
util.types.isDataView(new Float64Array()) // false 반환

ArrayBuffer.isView()도 참조하세요.

util.types.isDate(value)

추가된 버전: v10.0.0

값이 내장 Date 인스턴스이면 true를 반환합니다.

js
util.types.isDate(new Date()) // true 반환

util.types.isExternal(value)

추가된 버전: v10.0.0

값이 네이티브 External 값일 경우 true를 반환합니다.

네이티브 External 값은 네이티브 코드에서 액세스하기 위한 원시 C++ 포인터(void*)를 포함하며 다른 속성이 없는 특별한 유형의 객체입니다. 이러한 객체는 Node.js 내부 또는 네이티브 애드온에 의해 생성됩니다. JavaScript에서 이들은 null 프로토타입을 가진 동결된 객체입니다.

C
#include <js_native_api.h>
#include <stdlib.h>
napi_value result;
static napi_value MyNapi(napi_env env, napi_callback_info info) {
  int* raw = (int*) malloc(1024);
  napi_status status = napi_create_external(env, (void*) raw, NULL, NULL, &result);
  if (status != napi_ok) {
    napi_throw_error(env, NULL, "napi_create_external failed");
    return NULL;
  }
  return result;
}
...
DECLARE_NAPI_PROPERTY("myNapi", MyNapi)
...
js
const native = require('napi_addon.node')
const data = native.myNapi()
util.types.isExternal(data) // true 반환
util.types.isExternal(0) // false 반환
util.types.isExternal(new String('foo')) // false 반환

napi_create_external에 대한 자세한 내용은 napi_create_external()을 참조하십시오.

util.types.isFloat32Array(value)

추가된 버전: v10.0.0

값이 내장 Float32Array 인스턴스일 경우 true를 반환합니다.

js
util.types.isFloat32Array(new ArrayBuffer()) // false 반환
util.types.isFloat32Array(new Float32Array()) // true 반환
util.types.isFloat32Array(new Float64Array()) // false 반환

util.types.isFloat64Array(value)

Added in: v10.0.0

값이 내장 Float64Array 인스턴스이면 true를 반환합니다.

js
util.types.isFloat64Array(new ArrayBuffer()) // Returns false
util.types.isFloat64Array(new Uint8Array()) // Returns false
util.types.isFloat64Array(new Float64Array()) // Returns true

util.types.isGeneratorFunction(value)

Added in: v10.0.0

값이 제너레이터 함수이면 true를 반환합니다. 이것은 JavaScript 엔진이 보는 것만을 보고합니다. 특히 변환 도구를 사용한 경우 반환 값이 원래 소스 코드와 일치하지 않을 수 있습니다.

js
util.types.isGeneratorFunction(function foo() {}) // Returns false
util.types.isGeneratorFunction(function* foo() {}) // Returns true

util.types.isGeneratorObject(value)

Added in: v10.0.0

값이 내장 제너레이터 함수에서 반환된 제너레이터 객체이면 true를 반환합니다. 이것은 JavaScript 엔진이 보는 것만을 보고합니다. 특히 변환 도구를 사용한 경우 반환 값이 원래 소스 코드와 일치하지 않을 수 있습니다.

js
function* foo() {}
const generator = foo()
util.types.isGeneratorObject(generator) // Returns true

util.types.isInt8Array(value)

Added in: v10.0.0

값이 내장 Int8Array 인스턴스이면 true를 반환합니다.

js
util.types.isInt8Array(new ArrayBuffer()) // Returns false
util.types.isInt8Array(new Int8Array()) // Returns true
util.types.isInt8Array(new Float64Array()) // Returns false

util.types.isInt16Array(value)

추가된 버전: v10.0.0

값이 내장된 Int16Array 인스턴스이면 true를 반환합니다.

js
util.types.isInt16Array(new ArrayBuffer()) // false 반환
util.types.isInt16Array(new Int16Array()) // true 반환
util.types.isInt16Array(new Float64Array()) // false 반환

util.types.isInt32Array(value)

추가된 버전: v10.0.0

값이 내장된 Int32Array 인스턴스이면 true를 반환합니다.

js
util.types.isInt32Array(new ArrayBuffer()) // false 반환
util.types.isInt32Array(new Int32Array()) // true 반환
util.types.isInt32Array(new Float64Array()) // false 반환

util.types.isKeyObject(value)

추가된 버전: v16.2.0

value<KeyObject>이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

util.types.isMap(value)

추가된 버전: v10.0.0

값이 내장된 Map 인스턴스이면 true를 반환합니다.

js
util.types.isMap(new Map()) // true 반환

util.types.isMapIterator(value)

추가된 버전: v10.0.0

값이 내장된 Map 인스턴스에 대해 반환된 이터레이터이면 true를 반환합니다.

js
const map = new Map()
util.types.isMapIterator(map.keys()) // true 반환
util.types.isMapIterator(map.values()) // true 반환
util.types.isMapIterator(map.entries()) // true 반환
util.types.isMapIterator(map[Symbol.iterator]()) // true 반환

util.types.isModuleNamespaceObject(value)

추가된 버전: v10.0.0

값이 모듈 네임스페이스 객체의 인스턴스이면 true를 반환합니다.

js
import * as ns from './a.js'

util.types.isModuleNamespaceObject(ns) // true 반환

util.types.isNativeError(value)

추가된 버전: v10.0.0

값이 내장된 Error 타입의 생성자에 의해 반환되었으면 true를 반환합니다.

js
console.log(util.types.isNativeError(new Error())) // true
console.log(util.types.isNativeError(new TypeError())) // true
console.log(util.types.isNativeError(new RangeError())) // true

네이티브 에러 타입의 서브클래스 또한 네이티브 에러입니다.

js
class MyError extends Error {}
console.log(util.types.isNativeError(new MyError())) // true

값이 네이티브 에러 클래스의 instanceof인 것은 해당 값에 대해 isNativeError()true를 반환하는 것과 동일하지 않습니다. isNativeError()는 다른 영역에서 온 에러에 대해 true를 반환하는 반면, instanceof Error는 이러한 에러에 대해 false를 반환합니다.

js
const vm = require('node:vm')
const context = vm.createContext({})
const myError = vm.runInContext('new Error()', context)
console.log(util.types.isNativeError(myError)) // true
console.log(myError instanceof Error) // false

반대로, isNativeError()는 네이티브 에러의 생성자에 의해 반환되지 않은 모든 객체에 대해 false를 반환합니다. 여기에는 네이티브 에러의 instanceof인 값이 포함됩니다.

js
const myError = { __proto__: Error.prototype }
console.log(util.types.isNativeError(myError)) // false
console.log(myError instanceof Error) // true

util.types.isNumberObject(value)

추가된 버전: v10.0.0

값이 new Number()로 생성된 숫자 객체인 경우 true를 반환합니다.

js
util.types.isNumberObject(0) // false 반환
util.types.isNumberObject(new Number(0)) // true 반환

util.types.isPromise(value)

추가된 버전: v10.0.0

값이 내장된 Promise인 경우 true를 반환합니다.

js
util.types.isPromise(Promise.resolve(42)) // true 반환

util.types.isProxy(value)

추가된 버전: v10.0.0

값이 Proxy 인스턴스인 경우 true를 반환합니다.

js
const target = {}
const proxy = new Proxy(target, {})
util.types.isProxy(target) // false 반환
util.types.isProxy(proxy) // true 반환

util.types.isRegExp(value)

추가된 버전: v10.0.0

값이 정규 표현식 객체인 경우 true를 반환합니다.

js
util.types.isRegExp(/abc/) // true 반환
util.types.isRegExp(new RegExp('abc')) // true 반환

util.types.isSet(value)

Added in: v10.0.0

값이 내장 Set 인스턴스이면 true를 반환합니다.

js
util.types.isSet(new Set()) // Returns true

util.types.isSetIterator(value)

Added in: v10.0.0

값이 내장 Set 인스턴스에 대해 반환된 이터레이터이면 true를 반환합니다.

js
const set = new Set()
util.types.isSetIterator(set.keys()) // Returns true
util.types.isSetIterator(set.values()) // Returns true
util.types.isSetIterator(set.entries()) // Returns true
util.types.isSetIterator(set[Symbol.iterator]()) // Returns true

util.types.isSharedArrayBuffer(value)

Added in: v10.0.0

값이 내장 SharedArrayBuffer 인스턴스이면 true를 반환합니다. 여기에는 ArrayBuffer 인스턴스는 포함되지 않습니다. 일반적으로 둘 다 테스트하는 것이 바람직합니다. 이를 위해서는 util.types.isAnyArrayBuffer()를 참조하십시오.

js
util.types.isSharedArrayBuffer(new ArrayBuffer()) // Returns false
util.types.isSharedArrayBuffer(new SharedArrayBuffer()) // Returns true

util.types.isStringObject(value)

Added in: v10.0.0

값이 new String()으로 생성된 문자열 객체이면 true를 반환합니다.

js
util.types.isStringObject('foo') // Returns false
util.types.isStringObject(new String('foo')) // Returns true

util.types.isSymbolObject(value)

Added in: v10.0.0

값이 Symbol 기본형에 Object()를 호출하여 생성된 심볼 객체이면 true를 반환합니다.

js
const symbol = Symbol('foo')
util.types.isSymbolObject(symbol) // Returns false
util.types.isSymbolObject(Object(symbol)) // Returns true

util.types.isTypedArray(value)

Added in: v10.0.0

값이 내장 TypedArray 인스턴스이면 true를 반환합니다.

js
util.types.isTypedArray(new ArrayBuffer()) // Returns false
util.types.isTypedArray(new Uint8Array()) // Returns true
util.types.isTypedArray(new Float64Array()) // Returns true

ArrayBuffer.isView()도 참조하십시오.

util.types.isUint8Array(value)

Added in: v10.0.0

값이 내장 Uint8Array 인스턴스이면 true를 반환합니다.

js
util.types.isUint8Array(new ArrayBuffer()) // Returns false
util.types.isUint8Array(new Uint8Array()) // Returns true
util.types.isUint8Array(new Float64Array()) // Returns false

util.types.isUint8ClampedArray(value)

추가된 버전: v10.0.0

값이 내장된 Uint8ClampedArray 인스턴스이면 true를 반환합니다.

js
util.types.isUint8ClampedArray(new ArrayBuffer()) // false 반환
util.types.isUint8ClampedArray(new Uint8ClampedArray()) // true 반환
util.types.isUint8ClampedArray(new Float64Array()) // false 반환

util.types.isUint16Array(value)

추가된 버전: v10.0.0

값이 내장된 Uint16Array 인스턴스이면 true를 반환합니다.

js
util.types.isUint16Array(new ArrayBuffer()) // false 반환
util.types.isUint16Array(new Uint16Array()) // true 반환
util.types.isUint16Array(new Float64Array()) // false 반환

util.types.isUint32Array(value)

추가된 버전: v10.0.0

값이 내장된 Uint32Array 인스턴스이면 true를 반환합니다.

js
util.types.isUint32Array(new ArrayBuffer()) // false 반환
util.types.isUint32Array(new Uint32Array()) // true 반환
util.types.isUint32Array(new Float64Array()) // false 반환

util.types.isWeakMap(value)

추가된 버전: v10.0.0

값이 내장된 WeakMap 인스턴스이면 true를 반환합니다.

js
util.types.isWeakMap(new WeakMap()) // true 반환

util.types.isWeakSet(value)

Added in: v10.0.0

주어진 값이 내장된 WeakSet 인스턴스인 경우 true를 반환합니다.

js
util.types.isWeakSet(new WeakSet()) // true를 반환합니다.

사용 중단된 API

다음 API는 사용이 중단되었으며 더 이상 사용해서는 안 됩니다. 기존 응용 프로그램 및 모듈은 대체 방법을 찾도록 업데이트해야 합니다.

util._extend(target, source)

Added in: v0.7.5

Deprecated since: v6.0.0

[Stable: 0 - Deprecated]

Stable: 0 Stability: 0 - 사용 중단됨: 대신 Object.assign()을 사용하세요.

util._extend() 메서드는 내부 Node.js 모듈 외부에서 사용하기 위한 것이 아니었습니다. 커뮤니티에서 이를 발견하여 사용했습니다.

사용이 중단되었으며 새 코드에서 사용해서는 안 됩니다. JavaScript는 Object.assign()를 통해 매우 유사한 내장 기능을 제공합니다.

util.isArray(object)

Added in: v0.6.0

Deprecated since: v4.0.0

[Stable: 0 - Deprecated]

Stable: 0 Stability: 0 - 사용 중단됨: 대신 Array.isArray()을 사용하세요.

Array.isArray()의 별칭입니다.

주어진 objectArray이면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

js
const util = require('node:util')

util.isArray([])
// 반환 값: true
util.isArray(new Array())
// 반환 값: true
util.isArray({})
// 반환 값: false