Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 코드리뷰
- JavaScript
- Promise
- 웹 성능
- 퍼포먼스 최적화
- 웹 개발
- dom
- 패키지 스크립트
- 프론트엔드
- 비동기프로그래밍
- cmdline-tools missing
- fe
- #프론트엔드개발
- flutter 오류
- 웹개발
- 컴포넌트
- 프라미스체이닝
- Node.js
- React
- 자바스크립트공부
- 풀스택 개발
- jsx
- html
- 자바스크립트
- macos flutter
- 국제화(i18n)
- css
- flutter android sdk
- aondroid toolchain 오류
- 웹 성능 최적화
Archives
- Today
- Total
sodol-dotcom
Node.js에서 ES 모듈 오류 해결 본문
1. 오류 메시지
sodol@macpro section2 % node dist/index.js
(node:61269) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/sodol/frontend/TypeScript/onebite-typescript/section2/dist/index.js:2
export {};
^^^^^^
SyntaxError: Unexpected token 'export'
at wrapSafe (node:internal/modules/cjs/loader:1281:20)
at Module._compile (node:internal/modules/cjs/loader:1321:27)
at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
at Module.load (node:internal/modules/cjs/loader:1208:32)
at Module._load (node:internal/modules/cjs/loader:1024:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
at node:internal/main/run_main_module:28:49
Node.js v20.15.1
해석:
(node:61269) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
- Node.js가 ES 모듈을 로드하려고 하지만, 이를 위해서는 `package.json`에 `"type": "module"`을 설정하거나 파일 확장자를 `.mjs`로 변경해야 한다는 경고 메시지
(Use `node --trace-warnings ...` to show where the warning was created)
- 경고가 발생한 위치를 찾으려면 `node --trace-warnings` 명령어를 사용하라는 안내
/Users/sodol/frontend/TypeScript/onebite-typescript/section2/dist/index.js:2
- 오류가 발생한 파일과 줄 번호를 나타낸다. 이 경우 `/dist/index.js` 파일의 2번째 줄에서 오류가 발생했음을 보여줌
export {};
- 오류를 발생시킨 코드로, ES 모듈에서는 `export` 구문이 문제를 일으키고 있음
SyntaxError: Unexpected token 'export'
# 'export'라는 키워드가 예상하지 못한 위치에서 발견되었음을 나타내는 구문 오류
at wrapSafe (node:internal/modules/cjs/loader:1281:20)
# 오류가 발생한 내부 함수의 경로를 보여줌
at Module._compile (node:internal/modules/cjs/loader:1321:27)
# 모듈이 컴파일되는 과정에서 오류가 발생했음을 나타냄
at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
# 파일 확장자 처리 과정에서 오류가 발생했음을 나타냄
at Module.load (node:internal/modules/cjs/loader:1208:32)
# 모듈이 로드되는 과정에서의 오류 발생을 의미함
at Module._load (node:internal/modules/cjs/loader:1024:12)
# 모듈을 불러오는 과정에서 발생한 오류를 나타냄
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
# 사용자가 지정한 진입점(entry point)에서 오류가 발생했음을 의미함
# (프로그램이 실행되는 가장 첫 단계에서 문제를 발견했음을 나타냄)
# 진입점(entry point): 애플리케이션이나 프로그램이 시작되는 지점.
# 보통 index.js 또는 app.js 같은 파일이 진입점이 된다.
# Node.js 애플리케이션을 실행할 때, 이 파일이 먼저 로드되고 실행된다.
at node:internal/main/run_main_module:28:49
# Node.js의 내부 메인 모듈에서 오류가 발생한 위치를 나타냄
Node.js v20.15.1
2. 오류 발생 상황
- 프로젝트나 파일 위치: `/Users/sodol/frontend/TypeScript/onebite-typescript/section2/dist/index.js`
- 사용한 명령어: `node dist/index.js`
- 상황 설명: Node.js로 컴파일된 TypeScript 파일을 실행하려고 했을 때, `export`구문을 사용하려 했으나 Node.js는 CommonJS 모듈 방식을 기본으로 사용하기 때문에 오류가 발생함.
3. 오류 원인 분석
- Node.js는 기본적으로 CommonJS 방식으로 파일을 불러오고 내보낸다.
- ES 모듈 방식으로 코드를 작성했기 때문에 Node.js가 `export` 구문을 이해하지 못함
4. 해결 방법
- 방법 1: `package.json`에 `"type": "module"` 추가
- 프로젝트에서 ES 모듈을 사용하려면 package.json 파일에 `"type": "module"`을 추가하여 Node.js가 ES 모듈을 인식하게 할 수 있음.
#json
{
"type": "module"
}
- 방법 2: 파일 확장자를 `.mjs`로 변경
- ES 모듈 방식을 사용하고자 하는 파일의 확장자를 `.js`에서 `.mjs`로 변경하면 Node.js는 해당 파일을 ES 모듈로 처리함
- 방법 3: CommonJS 방식으로 코드 수정
- ES 모듈 대신 CommonJS 방식으로 코드를 작성하여 Node.js의 기본 모듈 시스템에 맞출 수 있음
#json
// ES 모듈 방식
export {};
// CommonJS 방식
module.exports = {};
5. 추가 참고 자료
- Node.js 공식 문서: ES 모듈 지원: https://nodejs.org/docs/latest-v20.x/api/esm.html
'Troubleshooting' 카테고리의 다른 글
[Troubleshooting] Flutter 개발 환경 세팅 중 Android SDK 오류 발생 및 해결 과정 정리(cmdline-tools component is missing) (0) | 2025.07.06 |
---|---|
[Troubleshooting] React 폼 필드 경고 해결: value와 onChange 오류 분석 및 해결 방법 (0) | 2024.11.15 |
비동기 데이터 처리: async/await와 Promise.all을 활용한 다중 API 호출 (3) | 2024.09.06 |
React에서 비동기 데이터 처리와 Promise 사용하기 (1) | 2024.09.06 |