require() Of ES Module
A JavaScript error occurred in the main process
Uncaught Exception:
Error [ERR_REQUIRE_ESMI: require) of ES Module /Users/gobeomsu/ Documents/GitHub/PixelScriber/node_modules/electron-is-dev/index.js from /Users/gobeomsu/Documents/GitHub/PixelScriber/dist/main/main.js not supported Instead change the require of index.js in /Users/gobeomsu/Documents/ GitHub/PixelScriber/dist/main/main.js to a dynamic import) which is available in all CommonJS modules. at I._load (node:electron/js2c/asar_bundle:2:13642) at Object.<anonymous> (/Users/gobeomsu/Documents/GitHub/PixelScriber/ dist/main/main.js:20:43) at ._load (node:electron/js2c/asar_bundle:2:13642)
TypeScript는 import
구문을 CommonJS의 require
로 변환하거나, ESM 형식으로 유지하는 두 가지 방식 중 하나를 취합니다.
electron-is-dev
모듈이 ESM 형식을 요구하는데, TypeScript 설정이나 변환 과정에서 이에 대응하지 못해 문제가 발생했습니다
- electron-is-dev 라이브러리를 ⚙️ Typescript 에서 사용하려했기 때문에 발생하는 문제
- TypeScript에서는 import를 require로 변환 또는 모드 import로 유지, 두 가지 선택지 밖에 없음
- 그런데, ESM 으로 달라고 하니 에러가 발생한다
해결 방법 : 타입스크립트 동적으로 가져오기 사용
let isDev: typeof import("electron-is-dev");
async function initializeApp() {
isDev = await import("electron-is-dev");
// 이제 isDev 변수를 사용하여 개발 환경 여부를 확인
// 여기에 초기화 로직을 추가
}
initializeApp();
TypeScript에서 typeof import()
구문을 사용하여 electron-is-dev
모듈을 동적으로 가져오는 방식으로 문제를 해결했습니다.
이 방법은 TypeScript의 고급 타입 기능을 활용하여 ESM 모듈을 비동기적으로 가져오는 방식입니다.
Thinking
- 2024-01-26 15:07 최신 동향으로 ESM으로 바뀌고 있는 과정이라 발생한 문제
728x90
'DEV' 카테고리의 다른 글
Crontab으로 리눅스 작업 자동화하기 (0) | 2024.02.05 |
---|---|
Electron 애플리케이션의 구조와 동작 원리 (0) | 2024.02.02 |
Typescript의 interfaced와 type의 차이는 뭘까 (0) | 2024.01.25 |
매번 yarn build 하지 않고 자동 빌드 및 재시작하는 방법 (0) | 2024.01.06 |
Electron 애플리케이션 개발: Yarn을 활용한 기본 설정과 파일 구성 (0) | 2024.01.04 |