기은P
시간이 멈추는 장소
기은P
  • Programming (272)
    • 개발노트 (1)
    • FrontEnd (56)
      • ES&JS 문법 (14)
      • HTML&CSS (4)
      • React 기본 (18)
      • React 심화 (12)
      • React 이슈 (2)
      • Project 연습 (1)
      • Next.js (5)
    • Backend&Devops (33)
      • AWS (2)
      • Docker (9)
      • Jenkins (6)
      • Nginx (6)
      • Node.js (1)
      • ElasticSearch (5)
      • 프레임워크&아키텍처 (2)
      • 암호화 (0)
      • 기타 (2)
    • 알고리즘 (3)
    • C# (8)
      • WPF (8)
    • Java (51)
      • 순수 Java (18)
      • RDF&Jena (12)
      • RCP&GEF (9)
      • JMX (5)
      • JMapper (3)
      • 오류해결 (4)
    • Database (21)
      • RDBMS (9)
      • NoSQL (2)
      • TSDB (1)
      • GraphQL (1)
      • Hibernate (3)
      • 데이터베이스 이론 (4)
      • Redis (1)
    • 프로토콜 (11)
      • Netty (4)
      • gRPC (5)
      • 프로토콜 개념 (2)
    • Server (4)
      • Linux (4)
    • 2020 정보처리기사 필기 (43)
      • 목차 (1)
      • 기출문제 (1)
      • 1과목 - 소프트웨어 설계 (6)
      • 2과목 - 소프트웨어 개발 (7)
      • 3과목 - 데이터베이스 구축 (8)
      • 4과목 - 프로그래밍 언어 활용 (7)
      • 5과목 - 정보시스템 구축 관리 (10)
    • 2020 정보처리기사 실기 (31)
      • 목차 (4)
      • 기출예상문제 (19)
      • 실기요약 (8)
    • 빅데이터분석기사 필기 (4)
      • 목차 (0)
      • 필기 요약 (3)
    • 전기 공학 (1)
      • CIM (1)
    • 산업자동화시스템 (3)
      • SCADA (1)
      • OPC UA (2)
    • 디자인패턴 (1)
    • 휴지통 (0)

공지사항

  • 공지사항/포스팅 예정 항목

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
기은P

시간이 멈추는 장소

[Next.js] Antd es module 사용시 이슈(nextjs antd syntaxerror cannot use import statement outside a module)
FrontEnd/Next.js

[Next.js] Antd es module 사용시 이슈(nextjs antd syntaxerror cannot use import statement outside a module)

2024. 6. 27. 16:31
반응형

01. Antd es module 사용시 이슈

antd의 es라고 붙은 컴포넌트를 사용할때  cannot use import statement outside a module 이런 이슈가 발생했다.

처음에 고치다가 잘 안되서 포기했는데, 다시 잘 찾아보니 해결 방법이 굉장히 간단했다.

 

 

 

02. 해결방법

1) yarn add next-transpile-modules 설치

2) next.config.mjs에 코드 추가

/** @type {import('next').NextConfig} */
import withTM from 'next-transpile-modules';
 
...

// antd는 무조건 들어가야하고, 나머지는 옵션
export default withTM(['antd', 'rc-picker', 'rc-util', '@ant-design/icons', 'rc-pagination', 'rc-notification'])({
    nextConfig
});

 

 

 

03. 발생이유

라이브러리 크기와 불러오기 방식

  • antd: 기본적으로 모든 Ant Design 컴포넌트와 스타일을 포함한 완전한 버전입니다. 이 버전을 불러올 때는 모든 Ant Design 컴포넌트와 스타일이 번들에 포함됩니다. 따라서 파일 크기가 크고 초기 로딩 시간이 더 걸릴 수 있습니다. 일반적으로 import { Button } from 'antd';와 같이 사용합니다.
  • antd/es: ES 모듈 형식으로 제공되며, 필요한 컴포넌트만 개별적으로 불러와서 사용할 수 있습니다. 이 방식은 트리 쉐이킹(tree shaking)이 가능하므로 번들 크기를 줄일 수 있습니다. 예를 들어 import Button from 'antd/es/button';와 같이 필요한 컴포넌트를 직접 지정하여 사용합니다.

2. 트리 쉐이킹과 번들 최적화

  • antd/es의 장점: ES 모듈 형식으로 제공되기 때문에 webpack과 같은 모듈 번들러에서 트리 쉐이킹을 활용할 수 있습니다. 이는 사용하지 않는 컴포넌트와 스타일을 번들에 포함시키지 않고 제거하여 번들 크기를 최소화할 수 있습니다. 따라서 대규모 애플리케이션에서 특히 유용합니다.
  • antd의 단점: 전체 라이브러리를 한 번에 불러오기 때문에 트리 쉐이킹이 제한적이며, 번들 크기가 크고 초기 로딩 속도가 느릴 수 있습니다. 작은 규모의 프로젝트에서는 큰 문제가 되지 않을 수 있지만, 큰 규모의 프로젝트에서는 번들 최적화가 중요한 요소가 될 수 있습니다.

3. 사용 시 고려사항

  • antd: 모든 컴포넌트와 스타일을 포함하기 때문에, 간편하게 모든 기능을 사용할 수 있으며 초기 설정이 간단합니다. 하지만 번들 크기와 성능에 대한 영향이 있을 수 있습니다.
  • antd/es: 필요한 컴포넌트만 선택적으로 불러와서 사용할 수 있습니다. 번들 크기를 최적화하고자 할 때 유용하지만, 초기 설정과 관리가 다소 복잡할 수 있습니다.

 

라고 하여, 번들 크기를 최소화, 경량화해서 사용하기 위해 나온게 es 모듈 컴포넌트인데, 이게 SSR을 사용하는 nextjs에서는 외부의 모듈을 사용하는 거기 때문에 문제가 발생하는 듯하다.

빌드할 때는 나중에 따로 조치를 해줘야할지도?

반응형
저작자표시 변경금지

'FrontEnd > Next.js' 카테고리의 다른 글

[Next.js] router query(props) 값이 비어있는 오류  (0) 2022.07.15
[Next.js] Proxy Axios 설정  (0) 2022.06.20
[Next.js] SSG, SSR 개념 정리  (0) 2022.06.02
[Next.js] Hydrate란?  (0) 2022.05.18
    'FrontEnd/Next.js' 카테고리의 다른 글
    • [Next.js] router query(props) 값이 비어있는 오류
    • [Next.js] Proxy Axios 설정
    • [Next.js] SSG, SSR 개념 정리
    • [Next.js] Hydrate란?
    기은P
    기은P
    기은P의 블로그 일상과 개발 관련 포스팅 #React #Typescript #Next #Nest https://github.com/kimdongjang

    티스토리툴바