Error

[Error] BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core

쟌문 2023. 7. 11. 22:44
반응형

여느 때와 마찬가지로 무난 무난하게 프로젝트 작업을 진행 중이었고 오류 수정을 위해 디버깅 작업을 진행 중이었다.
해당 프로젝트는 다른 팀원과 같이 협업 중인 프로젝트였으며, git pull & push 단계에서 발생하는 가벼운 git 충돌 외에 크리티컬 한 오류는 없었던 상황이었다.
 
오류를 발견하게 됐던 이 날도 작업 마무리 후 퇴근을 위해 디버깅 완료한 작업이력을 commit 하려 하는데, 정상적으로 commit 된 것과 동시에 제목에 언급된 에러 메시지가 ㄷㄷㄷㅈ 했다.
 
그래서 해결을 위해 찾아봤다.
 
먼저, 반환된 에러메시지 내용대로 구글링 해보았다. 여러 게시글들을 방문해 읽어보았고, 확인해 보던 중 stack overflow에서 관련글을 찾을 수 있었다.
 
stack overflow에 작성된 원문의 내용은 아래와 같았다.

There is another solution to provide node polyfills. Instead of modifying node_modules/@angular-devkit/build-angular/src/webpack/configs/browser.js and adding postinstall script to provide resolve.fallback, you can specify paths property in tsconfig.json, e.g.:

원문 링크: https://github.com/web3/web3.js/issues/4070
 
 
원만한 이해를 위해 Google 번역 확장 프로그램의 도움을 얻었다.

노드 polyfill을 제공하는 또 다른 솔루션이 있습니다. node_modules/@angular-devkit/build-angular/src/webpack/configs/browser.js를 수정하고 postinstall 스크립트를 추가하여 resolve.fallback을 제공하는 대신 tsconfig.json에서 경로 속성을 지정할 수 있습니다. 예:

 
핵심은 이랬다.

node_modules/@angular-devkit/build-angular/src/webpack/configs/browser.js를 수정하고 postinstall 스크립트를 추가하여 resolve.fallback을 제공.

하는 방법도 있지만, ( 요 방법으로 해결 ❌ )
 
필자는 Angular, Ionic 프레임워크를 사용중이기도 하고, Typescript를 사용중이어서

tsconfig.json에서 경로 속성을 지정

하는 방법을 택하기로 했다. ( 요 방법으로 해결 ✔ )
 
 
상세한 해결방법은 다음과 같았다.
 
1. crypto-browserify 및 관련 패키지 설치:
이 문제를 해결하기 위해 crypto-browserify, stream-browserify, assert, stream-http, https-browserify, os-browserify 패키지를 설치해야 하고, 프로젝트 디렉토리 터미널에서 다음 명령어를 실행하여 패키지를 설치한다.

npm install crypto-browserify stream-browserify assert stream-http https-browserify os-browserify

 
2. tsconfig.json 수정:
프로젝트의 tsconfig.json 파일을 열고 다음 내용을 추가한다:

{
  "compilerOptions": {
    "paths": {
      "crypto": ["./node_modules/crypto-browserify"],
      "stream": ["./node_modules/stream-browserify"],
      "assert": ["./node_modules/assert"],
      "http": ["./node_modules/stream-http"],
      "https": ["./node_modules/https-browserify"],
      "os": ["./node_modules/os-browserify"]
    }
  }
}

 
3. ( Angular 프레임워크를 사용중인 경우) angular.json 수정: 프로젝트의 angular.json 파일을 열고 다음 내용을 추가한다.
( 빌드 시간 경고 없이 CommonJS 패키지 암호화를 사용해야 한다는 아래 줄을 추가한다. )

"allowedCommonJsDependencies": ["crypto"]

 

{
  "architect": {
    "build": {
      "options": {
        "allowedCommonJsDependencies": ["crypto"]
      }
    }
  }
}

 
이렇게 하면 발생하던 에러가 해결된다.
 
해결방법 3번째 단계의 경우 필수가 아닐 수 있다.
문제 해결 당시 crypto 라이브러리를 사용중이었고,
에러가 발생한 원인 또한 crypto 라이브러리 설치 이후 사용하려고 할 때 발생했기 때문에
angular.json에 추가 설정을 해준 것이다.
 
각자 개발 환경과 상황이 다를 수 있기 때문에 필요에 따라 참고하면 좋을 거 같다.
 
 
 
 
구글링을 통해 문제를 해결한 이후,
문득 "그래서 발생한 이유가 뭐지?" "원인이 뭐지?" 라는 생각이 들었다.
그래서 또 찾아봤다.
 
이번엔 구글링이 아닌 똑똑하디 똑똑한 ChatGPT에게 물어봤다.
물어보자마자 신난듯이 발생한 원인과 해결방안을 제시했다.
 
 
 
야심차게 이어서 작성해보려고 ChatGPT 이전 기록 확인하려고 쭉~ 내려가던 중..
ChatGPT openai 사이트 오류로 인해 응답 받았던 내용 확인이 어려워 차후 to be continue.. ㅠ
 


반응형