Skip to content

모듈: ECMAScript 모듈

[히스토리]

버전변경 사항
v23.1.0import 속성이 더 이상 실험적인 기능이 아닙니다.
v22.0.0import assertion 지원 중단
v21.0.0, v20.10.0, v18.20.0import 속성에 대한 실험적 지원 추가
v20.0.0, v18.19.0모듈 사용자 정의 훅이 메인 스레드에서 실행되지 않습니다.
v18.6.0, v16.17.0모듈 사용자 정의 훅 체이닝 지원 추가
v17.1.0, v16.14.0import assertion에 대한 실험적 지원 추가
v17.0.0, v16.12.0사용자 정의 훅 통합, getFormat, getSource, transformSource, getGlobalPreloadCode 훅 제거, loadglobalPreload 훅 추가, resolve 또는 load 훅에서 format 반환 허용
v14.8.0최상위 대기(Top-Level Await) 플래그 제거
v15.3.0, v14.17.0, v12.22.0모듈 구현 안정화
v14.13.0, v12.20.0CommonJS 명명된 내보내기 감지 지원
v14.0.0, v13.14.0, v12.20.0실험적 모듈 경고 제거
v13.2.0, v12.17.0ECMAScript 모듈 로딩에 더 이상 명령줄 플래그가 필요하지 않습니다.
v12.0.0package.json"type" 필드를 통해 .js 파일 확장자를 사용하는 ES 모듈 지원 추가
v8.5.0추가됨: v8.5.0

[안정적: 2 - 안정적]

안정적: 2 안정성: 2 - 안정적

소개

ECMAScript 모듈은 JavaScript 코드를 재사용을 위해 패키징하는 공식 표준 형식입니다. 모듈은 다양한 importexport 문을 사용하여 정의됩니다.

다음은 ES 모듈에서 함수를 내보내는 예시입니다.

js
// addTwo.mjs
function addTwo(num) {
  return num + 2
}

export { addTwo }

다음은 ES 모듈에서 addTwo.mjs에서 함수를 가져오는 예시입니다.

js
// app.mjs
import { addTwo } from './addTwo.mjs'

// 출력: 6
console.log(addTwo(4))

Node.js는 현재 명시된 대로 ECMAScript 모듈을 완벽하게 지원하며, ECMAScript 모듈과 원래 모듈 형식인 CommonJS 간의 상호 운용성을 제공합니다.

활성화

Node.js에는 두 가지 모듈 시스템이 있습니다. CommonJS 모듈과 ECMAScript 모듈입니다.

작성자는 .mjs 파일 확장자, "module" 값을 가진 package.json "type" 필드 또는 "module" 값을 가진 --input-type 플래그를 통해 Node.js가 JavaScript를 ES 모듈로 해석하도록 지정할 수 있습니다. 이들은 ES 모듈로 실행될 코드임을 명시적으로 나타내는 표식입니다.

반대로 작성자는 .cjs 파일 확장자, "commonjs" 값을 가진 package.json "type" 필드 또는 "commonjs" 값을 가진 --input-type 플래그를 통해 Node.js가 JavaScript를 CommonJS로 해석하도록 명시적으로 지정할 수 있습니다.

코드에 두 모듈 시스템에 대한 명시적 표식이 없는 경우 Node.js는 모듈의 소스 코드를 검사하여 ES 모듈 구문을 찾습니다. 이러한 구문이 발견되면 Node.js는 코드를 ES 모듈로 실행하고, 그렇지 않으면 CommonJS로 모듈을 실행합니다. 자세한 내용은 모듈 시스템 결정을 참조하십시오.

패키지

이 섹션은 모듈: 패키지로 이동되었습니다.

import 지정자

용어

import 문의 지정자from 키워드 뒤에 오는 문자열입니다. 예를 들어 import { sep } from 'node:path'에서 'node:path'입니다. 지정자는 export from 문에서도 사용되며 import() 표현식의 인수로 사용됩니다.

세 가지 유형의 지정자가 있습니다.

  • './startup.js' 또는 '../config.mjs'와 같은 상대 지정자. 가져오는 파일의 위치를 기준으로 하는 상대 경로를 나타냅니다. 이러한 지정자에는 항상 파일 확장자가 필요합니다.
  • 'some-package' 또는 'some-package/shuffle'과 같은 베어 지정자. 각각의 예에서 패키지 이름으로 패키지의 주 진입점 또는 패키지 이름으로 접두어가 붙은 패키지 내의 특정 기능 모듈을 참조할 수 있습니다. 파일 확장자는 "exports" 필드가 없는 패키지에만 필요합니다.
  • 'file:///opt/nodejs/config.js'와 같은 절대 지정자. 전체 경로를 직접 명시적으로 참조합니다.

베어 지정자 확인은 Node.js 모듈 확인 및 로딩 알고리즘에 의해 처리됩니다. 다른 모든 지정자 확인은 항상 표준 상대 URL 확인 의미 체계로만 확인됩니다.

CommonJS와 마찬가지로 패키지 내의 모듈 파일은 패키지 이름에 경로를 추가하여 액세스할 수 있습니다. 단, 패키지의 package.json"exports" 필드가 포함되어 있는 경우 패키지 내의 파일은 "exports"에 정의된 경로를 통해서만 액세스할 수 있습니다.

Node.js 모듈 확인에서 베어 지정자에 적용되는 이러한 패키지 확인 규칙에 대한 자세한 내용은 패키지 설명서를 참조하십시오.

필수 파일 확장자

상대 또는 절대 지정자를 확인하기 위해 import 키워드를 사용할 때는 파일 확장자를 제공해야 합니다. 디렉토리 색인(예: './startup/index.js')도 완전히 지정해야 합니다.

이 동작은 일반적으로 구성된 서버를 가정할 때 브라우저 환경에서 import가 동작하는 방식과 일치합니다.

URL

ES 모듈은 URL로 확인되고 캐시됩니다. 즉, #%23으로, ?%3F와 같이 특수 문자는 퍼센트 인코딩되어야 합니다.

file: , node:data: URL 스키마가 지원됩니다. 'https://example.com/app.js' 와 같은 지정자는 사용자 지정 HTTPS 로더를 사용하지 않는 한 Node.js에서 기본적으로 지원되지 않습니다.

file: URL

모듈을 확인하는 데 사용된 import 지정자에 다른 쿼리 또는 조각이 있는 경우 모듈이 여러 번 로드됩니다.

js
import './foo.mjs?query=1' // "?query=1" 쿼리로 ./foo.mjs 로드
import './foo.mjs?query=2' // "?query=2" 쿼리로 ./foo.mjs 로드

볼륨 루트는 / , // 또는 file:///를 통해 참조할 수 있습니다. URL과 경로 확인(예: 퍼센트 인코딩 세부 정보) 간의 차이점을 고려하여 경로를 가져올 때 url.pathToFileURL을 사용하는 것이 좋습니다.

data: 가져오기

추가됨: v12.10.0

다음 MIME 유형을 사용하여 가져오기 위해 data: URL이 지원됩니다.

  • ES 모듈의 경우 text/javascript
  • JSON의 경우 application/json
  • Wasm의 경우 application/wasm
js
import 'data:text/javascript,console.log("hello!");';
import _ from 'data:application/json,"world!"' with { type: 'json' };

data: URL은 기본 제공 모듈 및 절대 지정자에 대한 베어 지정자만 확인합니다. data:특수 스키마가 아니므로 상대 지정자를 확인하는 것은 작동하지 않습니다. 예를 들어, data:text/javascript,import "./foo";에서 ./foo를 로드하려고 하면 data: URL에 대한 상대 확인 개념이 없기 때문에 확인되지 않습니다.

node: 임포트

[히스토리]

버전변경 사항
v16.0.0, v14.18.0require(...)node: 임포트 지원 추가
v14.13.1, v12.20.0추가됨: v14.13.1, v12.20.0

node: URL은 Node.js 내장 모듈을 로드하는 대체 수단으로 지원됩니다. 이 URL 체계를 통해 유효한 절대 URL 문자열로 내장 모듈을 참조할 수 있습니다.

js
import fs from 'node:fs/promises'

임포트 속성

[히스토리]

버전변경 사항
v21.0.0, v20.10.0, v18.20.0임포트 어서션에서 임포트 속성으로 전환
v17.1.0, v16.14.0추가됨: v17.1.0, v16.14.0

[안정적: 2 - 안정적]

안정적: 2 안정성: 2 - 안정적

임포트 속성은 모듈 지정자와 함께 추가 정보를 전달하기 위한 모듈 임포트 문의 인라인 구문입니다.

js
import fooData from './foo.json' with { type: 'json' };

const { default: barData } =
  await import('./bar.json', { with: { type: 'json' } });

Node.js는 다음 값을 지원하는 type 속성만 지원합니다.

속성 type필요한 경우
'json'JSON 모듈

type: 'json' 속성은 JSON 모듈을 임포트할 때 필수적입니다.

내장 모듈

내장 모듈은 공용 API의 명명된 내보내기를 제공합니다. CommonJS 내보내기의 값인 기본 내보내기도 제공됩니다. 기본 내보내기는 무엇보다도 명명된 내보내기를 수정하는 데 사용할 수 있습니다. 내장 모듈의 명명된 내보내기는 module.syncBuiltinESMExports()를 호출하여서만 업데이트됩니다.

js
import EventEmitter from 'node:events'
const e = new EventEmitter()
js
import { readFile } from 'node:fs'
readFile('./foo.txt', (err, source) => {
  if (err) {
    console.error(err)
  } else {
    console.log(source)
  }
})
js
import fs, { readFileSync } from 'node:fs'
import { syncBuiltinESMExports } from 'node:module'
import { Buffer } from 'node:buffer'

fs.readFileSync = () => Buffer.from('Hello, ESM')
syncBuiltinESMExports()

fs.readFileSync === readFileSync

import() 표현식

동적 import()는 CommonJS 및 ES 모듈 모두에서 지원됩니다. CommonJS 모듈에서는 ES 모듈을 로드하는 데 사용할 수 있습니다.

import.meta

import.meta 메타 속성은 다음 속성을 포함하는 Object입니다. ES 모듈에서만 지원됩니다.

import.meta.dirname

추가됨: v21.2.0, v20.11.0

[Stable: 1 - Experimental]

Stable: 1 Stability: 1.2 - Release candidate

import.meta.filename

추가됨: v21.2.0, v20.11.0

[Stable: 1 - Experimental]

Stable: 1 Stability: 1.2 - Release candidate

import.meta.url

  • <string> 모듈의 절대 file: URL입니다.

브라우저에서 현재 모듈 파일의 URL을 제공하는 것과 정확히 동일하게 정의됩니다.

이는 상대 파일 로딩과 같은 유용한 패턴을 가능하게 합니다.

js
import { readFileSync } from 'node:fs'
const buffer = readFileSync(new URL('./data.proto', import.meta.url))

import.meta.resolve(specifier)

[History]

버전변경 사항
v20.6.0, v18.19.0더 이상 표준이 아닌 parentURL 매개변수를 제외하고 --experimental-import-meta-resolve CLI 플래그 뒤에 있지 않습니다.
v20.6.0, v18.19.0이 API는 더 이상 로컬 FS에 있는 기존 파일로 매핑되지 않는 file: URL을 대상으로 할 때 예외를 throw하지 않습니다.
v20.0.0, v18.19.0이 API는 이제 Promise 대신 문자열을 동기적으로 반환합니다.
v16.2.0, v14.18.0parentURL 매개변수에 WHATWG URL 객체 지원 추가
v13.9.0, v12.16.2추가됨: v13.9.0, v12.16.2

[Stable: 1 - Experimental]

Stable: 1 Stability: 1.2 - Release candidate

  • specifier <string> 현재 모듈을 기준으로 확인할 모듈 지정자입니다.
  • 반환값: <string> 지정자가 확인될 절대 URL 문자열입니다.

import.meta.resolve는 각 모듈에 대해 범위가 지정된 모듈 상대 확인 함수로, URL 문자열을 반환합니다.

js
const dependencyAsset = import.meta.resolve('component-lib/asset.css')
// file:///app/node_modules/component-lib/asset.css
import.meta.resolve('./dep.js')
// file:///app/dep.js

Node.js 모듈 확인의 모든 기능이 지원됩니다. 종속성 확인은 패키지 내에서 허용되는 내보내기 확인에 따라 달라집니다.

주의 사항:

  • 이는 동기 파일 시스템 작업을 초래할 수 있으며, require.resolve와 마찬가지로 성능에 영향을 줄 수 있습니다.
  • 이 기능은 사용자 지정 로더 내에서는 사용할 수 없습니다(교착 상태가 발생합니다).

비표준 API:

--experimental-import-meta-resolve 플래그를 사용할 때 해당 함수는 두 번째 인수를 허용합니다.

  • parent <string> | <URL> 확인할 선택적 절대 부모 모듈 URL입니다. 기본값: import.meta.url

CommonJS와의 상호 운용성

import

import 문은 ES 모듈 또는 CommonJS 모듈을 참조할 수 있습니다. import 문은 ES 모듈에서만 허용되지만, 동적 import() 표현식은 ES 모듈을 로드하기 위해 CommonJS에서 지원됩니다.

CommonJS 모듈을 가져올 때, module.exports 객체가 기본 내보내기로 제공됩니다. 더 나은 에코시스템 호환성을 위한 편의를 위해 정적 분석을 통해 명명된 내보내기를 사용할 수 있습니다.

require

CommonJS 모듈 require는 현재 동기 ES 모듈(즉, 최상위 await를 사용하지 않는 ES 모듈) 로드만 지원합니다.

자세한 내용은 require()를 사용하여 ECMAScript 모듈 로드를 참조하십시오.

CommonJS 네임스페이스

[이력]

버전변경 사항
v23.0.0CJS 네임스페이스에 'module.exports' 내보내기 마커 추가
v14.13.0추가됨: v14.13.0

CommonJS 모듈은 어떤 유형이든 될 수 있는 module.exports 객체로 구성됩니다.

이를 지원하기 위해 ECMAScript 모듈에서 CommonJS를 가져올 때 CommonJS 모듈에 대한 네임스페이스 래퍼가 생성되며, 이는 항상 CommonJS module.exports 값을 가리키는 default 내보내기 키를 제공합니다.

또한, module.exports의 값에서 네임스페이스에 제공할 내보내기의 최선의 정적 목록을 얻기 위해 CommonJS 모듈의 소스 텍스트에 대한 휴리스틱 정적 분석이 수행됩니다. 이러한 네임스페이스는 CJS 모듈의 평가 전에 생성되어야 하기 때문에 필요합니다.

이러한 CommonJS 네임스페이스 객체는 CommonJS에서의 표현이 이 값을 사용하고 네임스페이스 값을 사용하지 않음을 명확하게 나타내기 위해 default 내보내기를 'module.exports' 명명된 내보내기로 제공합니다. 이는 require(esm) 상호 운용성 지원에서 'module.exports' 내보내기 이름 처리의 의미를 반영합니다.

CommonJS 모듈을 가져올 때 ES 모듈 기본 가져오기 또는 해당하는 설탕 구문을 사용하여 안정적으로 가져올 수 있습니다.

js
import { default as cjs } from 'cjs'
// 위와 동일
import cjsSugar from 'cjs'

console.log(cjs)
console.log(cjs === cjsSugar)
// 출력:
//   <module.exports>
//   true

이 모듈 네임스페이스 외래 객체는 import * as m from 'cjs' 또는 동적 가져오기를 사용할 때 직접 관찰할 수 있습니다.

js
import * as m from 'cjs'
console.log(m)
console.log(m === (await import('cjs')))
// 출력:
//   [Module] { default: <module.exports>, 'module.exports': <module.exports> }
//   true

JS 에코시스템에서 기존 사용과의 호환성을 높이기 위해 Node.js는 정적 분석 프로세스를 사용하여 가져온 모든 CommonJS 모듈의 CommonJS 명명된 내보내기를 별도의 ES 모듈 내보내기로 제공하려고 시도합니다.

예를 들어, 다음과 같이 작성된 CommonJS 모듈을 고려해 보십시오.

js
// cjs.cjs
exports.name = 'exported'

앞의 모듈은 ES 모듈에서 명명된 가져오기를 지원합니다.

js
import { name } from './cjs.cjs'
console.log(name)
// 출력: 'exported'

import cjs from './cjs.cjs'
console.log(cjs)
// 출력: { name: 'exported' }

import * as m from './cjs.cjs'
console.log(m)
// 출력:
//   [Module] {
//     default: { name: 'exported' },
//     'module.exports': { name: 'exported' },
//     name: 'exported'
//   }

로그된 모듈 네임스페이스 외래 객체의 마지막 예에서 볼 수 있듯이, name 내보내기는 module.exports 객체에서 복사되어 모듈이 가져올 때 ES 모듈 네임스페이스에 직접 설정됩니다.

실시간 바인딩 업데이트 또는 module.exports에 추가된 새 내보내기는 이러한 명명된 내보내기에 대해 감지되지 않습니다.

명명된 내보내기의 감지는 일반적인 구문 패턴을 기반으로 하지만 항상 명명된 내보내기를 정확하게 감지하는 것은 아닙니다. 이러한 경우 위에 설명된 기본 가져오기 형식을 사용하는 것이 더 나은 옵션일 수 있습니다.

명명된 내보내기 감지는 많은 일반적인 내보내기 패턴, 재내보내기 패턴 및 빌드 도구 및 트랜스파일러 출력을 포함합니다. 구현된 정확한 의미는 cjs-module-lexer를 참조하십시오.

ES 모듈과 CommonJS의 차이점

require, exports, 또는 module.exports 없음

대부분의 경우, ES 모듈 import를 사용하여 CommonJS 모듈을 로드할 수 있습니다.

필요한 경우, module.createRequire()를 사용하여 ES 모듈 내에서 require 함수를 생성할 수 있습니다.

__filename 또는 __dirname 없음

이러한 CommonJS 변수는 ES 모듈에서 사용할 수 없습니다.

__filename__dirname 사용 사례는 import.meta.filenameimport.meta.dirname을 통해 복제할 수 있습니다.

애드온 로드 없음

애드온은 현재 ES 모듈 가져오기에서 지원되지 않습니다.

대신 module.createRequire() 또는 process.dlopen을 사용하여 로드할 수 있습니다.

require.resolve 없음

상대적 해석은 new URL('./local', import.meta.url)을 통해 처리할 수 있습니다.

완벽한 require.resolve 대체 기능으로는 import.meta.resolve API가 있습니다.

또는 module.createRequire()를 사용할 수 있습니다.

NODE_PATH 없음

NODE_PATHimport 지정자를 해석하는 데 포함되지 않습니다. 이 동작이 필요한 경우 심볼릭 링크를 사용하십시오.

require.extensions 없음

importrequire.extensions를 사용하지 않습니다. 모듈 사용자 정의 훅이 대체 기능을 제공할 수 있습니다.

require.cache 없음

ES 모듈 로더에는 자체 별도 캐시가 있으므로 importrequire.cache를 사용하지 않습니다.

JSON 모듈

[히스토리]

버전변경 사항
v23.1.0JSON 모듈이 더 이상 실험적이지 않습니다.

[안정적: 2 - 안정적]

안정적: 2 안정성: 2 - 안정적

JSON 파일은 import를 통해 참조할 수 있습니다.

js
import packageConfig from './package.json' with { type: 'json' };

with { type: 'json' } 구문은 필수입니다. 가져오기 특성을 참조하십시오.

가져온 JSON은 default 내보내기만 노출합니다. 명명된 내보내기는 지원되지 않습니다. 중복을 피하기 위해 CommonJS 캐시에 캐시 항목이 생성됩니다. JSON 모듈이 동일한 경로에서 이미 가져온 경우 CommonJS에서 동일한 객체가 반환됩니다.

Wasm 모듈

[Stable: 1 - Experimental]

Stable: 1 Stability: 1 - Experimental

--experimental-wasm-modules 플래그 아래에서 WebAssembly 모듈 가져오기를 지원하여 모든 .wasm 파일을 일반 모듈처럼 가져오는 동시에 해당 모듈 가져오기를 지원합니다.

이 통합은 WebAssembly에 대한 ES 모듈 통합 제안과 일치합니다.

예를 들어, 다음과 같은 index.mjs가 있습니다.

js
import * as M from './module.wasm'
console.log(M)

다음과 같이 실행하면:

bash
node --experimental-wasm-modules index.mjs

module.wasm 인스턴스화에 대한 내보내기 인터페이스를 제공합니다.

최상위 await

추가됨: v14.8.0

await 키워드는 ECMAScript 모듈의 최상위 본문에서 사용할 수 있습니다.

다음과 같은 a.mjs를 가정합니다.

js
export const five = await Promise.resolve(5)

그리고 다음과 같은 b.mjs를 가정합니다.

js
import { five } from './a.mjs'

console.log(five) // `5` 출력
bash
node b.mjs # 작동

최상위 await 표현식이 해결되지 않으면 node 프로세스는 13 상태 코드로 종료됩니다.

js
import { spawn } from 'node:child_process'
import { execPath } from 'node:process'

spawn(execPath, [
  '--input-type=module',
  '--eval',
  // 해결되지 않는 Promise:
  'await new Promise(() => {})',
]).once('exit', code => {
  console.log(code) // `13` 출력
})

로더

이전 로더 문서는 이제 모듈: 사용자 정의 훅에 있습니다.

확인 및 로딩 알고리즘

기능

기본 확인기는 다음과 같은 속성을 가지고 있습니다.

  • ES 모듈에서 사용되는 것과 같은 FileURL 기반 확인
  • 상대 및 절대 URL 확인
  • 기본 확장자 없음
  • 폴더 메인 없음
  • node_modules를 통한 베어 스페시파이어 패키지 확인 조회
  • 알 수 없는 확장자 또는 프로토콜에 실패하지 않음
  • 로딩 단계에 형식 힌트를 선택적으로 제공할 수 있음

기본 로더는 다음과 같은 속성을 가지고 있습니다.

  • node: URL을 통한 기본 제공 모듈 로딩 지원
  • data: URL을 통한 "인라인" 모듈 로딩 지원
  • file: 모듈 로딩 지원
  • 다른 URL 프로토콜에 실패
  • file: 로딩에 대한 알 수 없는 확장자에 실패 (.cjs, .js.mjs만 지원)

해상도 알고리즘

ES 모듈 지정자를 로드하는 알고리즘은 아래의 ESM_RESOLVE 메서드를 통해 제공됩니다. 이는 상위 URL을 기준으로 모듈 지정자의 해석된 URL을 반환합니다.

해상도 알고리즘은 모듈 로드에 대한 전체 해석된 URL과 제안된 모듈 형식을 결정합니다. 해상도 알고리즘은 해석된 URL 프로토콜을 로드할 수 있는지 또는 파일 확장자가 허용되는지 여부를 결정하지 않습니다. 대신 이러한 유효성 검사는 로드 단계에서 Node.js에 의해 적용됩니다(예: file:이 아닌 프로토콜을 가진 URL을 로드하도록 요청받은 경우, data: 또는 node:).

알고리즘은 또한 확장자를 기반으로 파일의 형식을 결정하려고 시도합니다(아래의 ESM_FILE_FORMAT 알고리즘 참조). 파일 확장자를 인식하지 못하는 경우(예: .mjs, .cjs 또는 .json이 아닌 경우) undefined 형식이 반환되며, 이는 로드 단계에서 오류를 발생시킵니다.

해석된 URL의 모듈 형식을 결정하는 알고리즘은 ESM_FILE_FORMAT에 의해 제공되며, 모든 파일의 고유한 모듈 형식을 반환합니다. "module" 형식은 ECMAScript 모듈에 대해 반환되고, "commonjs" 형식은 레거시 CommonJS 로더를 통해 로드함을 나타내는 데 사용됩니다. *"addon"*과 같은 추가 형식은 향후 업데이트에서 확장될 수 있습니다.

다음 알고리즘에서 모든 서브루틴 오류는 달리 명시되지 않는 한 이러한 최상위 루틴의 오류로 전파됩니다.

defaultConditions는 조건부 환경 이름 배열 ["node", "import"]입니다.

해석기는 다음 오류를 발생시킬 수 있습니다.

  • 잘못된 모듈 지정자: 모듈 지정자는 잘못된 URL, 패키지 이름 또는 패키지 하위 경로 지정자입니다.
  • 잘못된 패키지 구성: package.json 구성이 잘못되었거나 잘못된 구성을 포함합니다.
  • 잘못된 패키지 대상: 패키지 내보내기 또는 가져오기는 잘못된 유형 또는 문자열 대상인 패키지에 대한 대상 모듈을 정의합니다.
  • 패키지 경로가 내보내지 않음: 패키지 내보내기는 지정된 모듈에 대해 패키지에서 대상 하위 경로를 정의하거나 허용하지 않습니다.
  • 패키지 가져오기가 정의되지 않음: 패키지 가져오기는 지정자를 정의하지 않습니다.
  • 모듈을 찾을 수 없음: 요청된 패키지 또는 모듈이 존재하지 않습니다.
  • 지원되지 않는 디렉토리 가져오기: 해석된 경로는 모듈 가져오기에 대한 지원되는 대상이 아닌 디렉토리에 해당합니다.

해상도 알고리즘 명세

ESM_RESOLVE(specifier, parentURL)

PACKAGE_RESOLVE(packageSpecifier, parentURL)

PACKAGE_SELF_RESOLVE(packageName, packageSubpath, parentURL)

PACKAGE_EXPORTS_RESOLVE(packageURL, subpath, exports, conditions)

PACKAGE_IMPORTS_RESOLVE(specifier, parentURL, conditions)

PACKAGE_IMPORTS_EXPORTS_RESOLVE(matchKey, matchObj, packageURL, isImports, conditions)

PATTERN_KEY_COMPARE(keyA, keyB)

PACKAGE_TARGET_RESOLVE(packageURL, target, patternMatch, isImports, conditions)

ESM_FILE_FORMAT(url)

LOOKUP_PACKAGE_SCOPE(url)

READ_PACKAGE_JSON(packageURL)

DETECT_MODULE_SYNTAX(source)

ESM 지시자 해상도 알고리즘 사용자 지정

모듈 사용자 지정 훅은 ESM 지시자 해상도 알고리즘을 사용자 지정하기 위한 메커니즘을 제공합니다. ESM 지시자에 대해 CommonJS 스타일 해상도를 제공하는 예는 commonjs-extension-resolution-loader입니다.