Javascript/Node.js

[ Node.js ] - type module에서 require 사용하기

algml0703 2022. 8. 17. 10:11
반응형

require / exports 와 import / export

commonjs => require / exports 
es6 module => import (import * as name from 'name')/ export / export default

 

특정 파일이나 모듈을 불러오거나 내보내기 할 때 사용할 수 있는 것은 require/exports 또는 import/export  이다. 기본적으로 npm init -y을 통해 프로젝트가 생성된 경우 기본적인 설정값은 require/exports로 되어있다. import/export는 es6에서 발생한 것으로써 package.json파일에서 "type":"module"을 설정해줌으로써 사용할 수 있다. (참고로 require/exports는 "type":"commonjs"이다.)

es6 모듈로 설정된 환경에서 commonjs 문법을 사용하거나, 반대로 commonjs로 설정된 환경에서 es6문법을 사용하는 경우 에러가 나게 된다. 

아래의 사진은 commonjs 환경에서 import를 사용하려 해서 발생한 에러이다.

아래의 사진은 es6 module 환경에서 require를 사용하려 해서 발생한 에러이다.

하지만 어떠한 모듈은 import를 통해서만 가져오거나 require를 통해 가져오는 것만 허용되는 경우가 있다. 또는 함수 내에서와 같은 경우는 require를 통해서만 모듈을 가져올 수 있고, import는 함수 안에서 사용될 수 없다. 이런 경우 import와 require 모두를 한 프로젝트 내에서 사용해야만 된다.

**  함수 내에서 import 를 사용하려 하면 에러가 발생하는 것을 확인할 수 있다.

** 반면에 require는 함수 내에서 사용시에도 특별에 에러가 나지 않는 것을 확인할 수 있다.

두 가지를 모두 사용하는 방법은 아래와 같다.

우선 기본적으로 packags.json 파일의 설정에서 "type":"module"로 설정한 후 require가 필요한 부분에서 아래와 같이 사용하면 된다.

import { createRequire } from "module";
const require = createRequire(import.meta.url);
require("dotenv").config();

 

출처

https://www.youtube.com/watch?v=qFUonWJ-Tb0 

반응형