Webpack 러닝 가이드
  • Webpack 모듈 번들러
  • Web Modules
    • Legacy 모듈 관리
    • ES 모듈 관리
  • Babel
    • Babel JavaScript 컴파일러
    • Babel 독립형 빌드
    • Babel 노드 (Node.js) ✘
    • Babel CLI 구성
    • Babel 플러그인
  • webpack
    • Webpack 개발 환경 구성
      • Webpack 설치
      • Webpack 통합
      • Webpack 구성 파일
      • Webpack 워치
      • Webpack 모드
      • Webpack 별칭 등록
      • Webpack 호환성
      • Webpack 개발 서버
      • Webpack 멀티 페이지 설정
    • Webpack 로더
      • File 로더
      • CSS 로더
      • PostCSS 로더
      • Sass 로더
      • Babel 로더
      • TypeScript 로더
    • Webpack 플러그인
      • 환경 변수 등록
      • 빌드 결과 자동 정리
      • 빌드 결과 자동 주입
      • CSS 파일 개별 추출
      • CSS 파일 크기 최적화
      • CSS 미디어쿼리 스플리팅
      • 이미지 파일 크기 최적화
  • React
    • React App 매뉴얼 구성
      • Webpack 초기 구성
      • Babel 컴파일러 구성
      • CSS 스타일 구성
      • 이미지 구성
      • 환경변수 플러그인
      • HTML 플러그인
      • 최적화 구성
      • 코드 스플리팅
      • 개발 서버
      • 이미지, 폰트 에셋 구성
      • 환경 변수 + HTML 구성
      • 빌드 최적화 구성
      • 빌드 자동 정리 구성
      • 개발 서버 구성
      • 폴리필 구성
Powered by GitBook
On this page
  • @babel/node
  • Node.js ES 모듈
  • mjs 확장자
  • module 타입 설정
  • 참고

Was this helpful?

  1. Babel

Babel 노드 (Node.js) ✘

Node.js 환경에서의 ES 모듈 사용

PreviousBabel 독립형 빌드NextBabel CLI 구성

Last updated 4 years ago

Was this helpful?

@babel/node

는 Node.js 명령어 환경(CLI)과 동일하게 작동합니다. 다만 명령을 실행하기 전에 Babel 사전 설정(presets) 및 플러그인(plugins)을 사용해 컴파일 한 후, 코드를 실행한다는 점이 다릅니다.

Node.js 12 버전부터 ES 모듈을 (실험적으로) 지원 함에 따라 @babel/node 사용은 필요하지 않습니다.

Node.js ES 모듈

Node.js에서 ES 모듈을 사용하려면 파일 확장자를 js 대신 mjs를 사용하거나, package.json 파일에 "type"을 모듈(module)로 설정해 사용해야 합니다.

mjs 확장자

프로젝트에서 부분적으로 ES 모듈을 사용할 때 가장 쉽고 빠르게 적용할 수 있는 방법입니다.

src/
├── ellipseText.mjs
└── index.mjs
import { ellipseText } from './ellipseText.mjs'

console.log(
  ellipseText(
    `Node.js 환경에서 ES 모듈을 사용하려면 mjs 확장자 또는 
     package.json에 type을 module로 설정해야 합니다.`
  )
)
export const ellipseText = (text, limit = 100) => `${text.slice(0, limit)}...`

모듈을 불러올 때 반드시 확장자 추가 필요

import 키워드로 모듈을 불러올 때 반드시 확장자까지 포함해서 경로를 명시를 해줘야 합니다. 이는 ES 표준 방식을 맞추기 위해 의도적으로 설계된 부분이기 때문입니다. (웹 브라우저도 동일하게 동작)

module 타입 설정

package.json 파일 설정을 통해 전체 파일에 적용하는 방법으로 모든 파일의 확장자를 일일이 mjs로 바꾸지 않고, 프로젝트 전체에 ES 모듈을 적용하고 싶을 때 적합한 방법입니다.

{
  "type": "module"
}

package.json 타입 설정을 모듈로 변경하면 다시 js 확장자를 사용해 ES 모듈을 사용합니다.

import { ellipseText } from './ellipseText.js'

console.log(
  ellipseText(
    `Node.js 환경에서 ES 모듈을 사용하려면 mjs 확장자 또는 
     package.json에 type을 module로 설정해야 합니다.`
  )
)
export const ellipseText = (text, limit = 100) => `${text.slice(0, limit)}...`

실행 성공: 출력 메시지

(node:33561) ExperimentalWarning: The ESM module loader is experimental.

Node.js 환경에서 ES 모듈을 사용하려면 mjs 확장자 또는 package.json에 type을 module로 설정...

실행 실패: 출력 메시지

(node:32823) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.

SyntaxError: Cannot use import statement outside a module

참고

@babel/node
@babel/node · Babel
Logo