Save my data

(리액트)error:0308010C:digital envelope routines::unsupported 해결 본문

개인공부

(리액트)error:0308010C:digital envelope routines::unsupported 해결

양을 좋아하는 문씨 2023. 5. 24. 15:14

npm audit fix --force 이후에 npm start를 하니 아래와 같은 에러코드가 뜨면서 실행이 안됬다.

 

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (F:\GitHub_management\projects\react-todo\node_modules\webpack\lib\util\createHash.js:90:53)
    at NormalModule._initBuildHash (F:\GitHub_management\projects\react-todo\node_modules\webpack\lib\NormalModule.js:386:16)
    at F:\GitHub_management\projects\react-todo\node_modules\webpack\lib\NormalModule.js:418:10
    at F:\GitHub_management\projects\react-todo\node_modules\loader-runner\lib\LoaderRunner.js:367:11
    at F:\GitHub_management\projects\react-todo\node_modules\loader-runner\lib\LoaderRunner.js:233:18
    at context.callback (F:\GitHub_management\projects\react-todo\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
    at F:\GitHub_management\projects\react-todo\node_modules\babel-loader\lib\index.js:51:103 {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v18.16.0

 

현재 Node.js 최신 버전을 사용하고 있다는 것을 알 수 있다.

구글링하여 원인을 찾았다.

 

 

error-0308010C-digital envelope routines--unsupported

해당 포스트는 에러에 대한 내용과 도움받은 참고 사이트를 기록하는 글입니다.

velog.io

 

원인 요약 :

Webpack 빌드 프로세스에는 MD4 알고리즘이 사용되는데,

최신 Node.js 버전에서는 MD4 알고리즘이 더 이상 지원되지 않기 때문에 발생하는 문제였다.

즉, 최신 버전의 Node.js와 기존 Webpack의 버전 간 차이로 인해 발생하는 호환성 이슈였던 것이다.

(무턱대고 최첨단 버전을 사용하는게 이래서 안좋다. 가급적 스테이블 버전을 쓰자.)

 

이와 관련하여 아래와 같은 해결책을 찾았다.

 

 

How to Fix error:0308010C:digital envelope routines::unsupported

To fix the error:0308010C:digital envelope routines::unsupported, enable the legacy provider for Node.js by passing --openssl-legacy-provider flag to webpack.

www.datainfinities.com

 

해결책 요약 :

package.json 파일에 다음의 명령어를 자신의 개발 환경에 맞게 입력해주면 된다.

 

# for macOS, Linux or Windows Git Bash
export NODE_OPTIONS=--openssl-legacy-provider

# for Windows CMD (Command Prompt)
set NODE_OPTIONS=--openssl-legacy-provider

# for Windows PowerShell
$env:NODE_OPTIONS="--openssl-legacy-provider"

# for Docker (in your Dockerfile)
ENV NODE_OPTIONS="--openssl-legacy-provider"

 

나는 윈도우 환경에서 사용중이기 때문에 아래와 같은 상태에서,

 

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    ...
  },

 

이렇게 바꿔서 해결했다.

 

"scripts": {
    "start": "set NODE_OPTIONS=--openssl-legacy-provider && react-scripts start",
    "build": "set NODE_OPTIONS=--openssl-legacy-provider && react-scripts build",
    ...
  },

 

의문점 :

참고한 공식 문서에서는 해결법으로 아래와 같이 작성하라고 지시하고 있다.

 

{
  "scripts": {
    "start": "react-scripts start --openssl-legacy-provider",
  }
}

 

1. 그런데 이렇게 작성하면 실행이 안된다.

(--openssl-legacy-provider 부분을 앞으로 빼면 터미널에서 명령어 인식을 못한다.)

2. 그리고 빌드와 관련해서 발생하는 문제인데 왜 start부분만 바꾸라고 지시하고 있는지도 모르겠다.

(위 처럼 build부분을 빼고 start만 수정해도 잘 켜지긴 한다.)

 

Comments