Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • react
  • 백준
  • 기초
  • 회고
  • typescript
  • Error
  • vite
  • 프로그래머스
  • Object
  • 코딩테스트
  • react-native
  • ReactNative
  • 자바스크립트
  • javascript
  • 알고리즘
  • 리액트
  • 코칭스터디
  • Git

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

[RN] Node 업그레이드 후 빌드 오류 (error:0308010C:digital)
Programing/React-Native

[RN] Node 업그레이드 후 빌드 오류 (error:0308010C:digital)

2023. 9. 11. 00:50

History

기존에 사용하던 node 버전은 v16.16.0 인데 꽤 지난 버전이기도 하고 협업과정에 node 버전 차이가 문제가 되기도 해 이번 기회에 업그레이드하기로 했다. node 버전관리는 nvm을 사용하고 있기 때문에 lts 버전을 다운로드하여 버전을 바꿔주었다.

nvm install --lts

설치가 끝난 후 사용할 node 버전을 바꿔주고 별다른 이유가 없다면 default 버전도 변경해준다.

nvm use --lts
nvm alias default v18.17.1	// 여기는 --lts 옵션이 듣질 않으니 직접 버전을 입력해줘야 한다,,,
// 변경사항 확인
nvm ls 
node -v

node 버전을 올리는 것까지는 문제없으나 metro를 실행하면 이런 에러를 받는다.

Failed to construct transformer:  Error: error:0308010C:digital envelope routines::unsupported
...
{
  opensslErrorStack: [
    'error:03000086:digital envelope routines::initialization error',
  ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED',
};

 

Why

Node 17버전 로그에서 힌트를 얻을 수 있다. 17이상 버전에서는 OpenSSL 3.0 을 사용하는데 일부 알고리즘 혹은 key 크기가 기존의 OpenSSL 1.1.1과 호환되지 않을 수 있다고 한다. OpenSSL github의 토론 정보와 종합해 보면 Webpack이 번들링 하는 과정에 사용하는 알고리즘인 MD4가 보안상의 이유로 OpenSSL 3.0에서는 사용되지 않고 node에서 ERR_OSSL_EVP_UNSUPPORTED 이 메시지로 에러처리 해둔 것 같다.

에러를 해결하기 위해 OpenSSL이 무엇이고 webpack과 어떤 상관관계가 있는지는 중요하지 않으니 임시해결책으로 던져준

--openssl-legacy-provider

이 옵션만 알고 가면 되는데 앞서 언급한 MD4 알고리즘을 포함한 레거시 알고리즘의 모음이라고 보면 된다.

 

Sol

1. 어쩌면 간단한 문제

node 버전을 변경시켰기 때문에 기존의 번들과 cache를 지우고 재설치하는 방식으로 해결될 수 있다.

// node modules 삭제
rm -rf node_modules
rm -rf yarn.lock	// for yarn
rm -rf package-lock.json	// for npm

// npm cache
npm cache clean --force

// android build
cd android
./gradlew clean

// xcode build
rm -rf ~/Library/Developer/Xcode/DerivedData/*
// xcode 내 프로젝트 클린 단축키 : CMD + Shift + K

깨끗하게 지우고 다시 패키지 설치

// for yarn
yarn

// for npm 
npm install

// if ios
cd pod && pod install

 

2. --openssl-legacy-provider

node option을 사용하기 위해서 프로텍트 폴더 내 터미널에서

export NODE_OPTIONS=--openssl-legacy-provider

이 명령어를 입력 후 metro를 켜보면 된다.

 

앱을 열 때 같이 사용하도록 script를 만들어줄 수 있는데

package.json 파일에서 기존 명령어에 export NODE_OPTIONS=--openssl-legacy-provider && 를 추가해 주면 된다.

  "scripts": {
	...
    "start": "export NODE_OPTIONS=--openssl-legacy-provider && react-native start",
    "ios": "export NODE_OPTIONS=--openssl-legacy-provider && react-native run-ios",
    "android": "export NODE_OPTIONS=--openssl-legacy-provider && react-native run-android",
    "android:apk": "export NODE_OPTIONS=--openssl-legacy-provider && cd android && ./gradlew app:assembleRelease && cd ..",
  },

 

xcode build error

위 방식으로 metro에 접속은 가능하나, ios 앱을 빌드하고 있다면 xcode에서 앱 빌드시 다시 opensslError를 만날 수 있다.

에러의 원인과 해결방법은 동일하다. xcode에서 프로젝트를 선택한 후 Build Phases 탭에 들어가 Bundle React Native code and images 탭을 열어 위 export문을 추가해 주자. 빌드 클린 ( cmd + shift + k ) 후 재빌드 해보면 된다. 

3. node version downgrade

복잡한 사유로 도저히 해결이 안 된다면 이 이슈가 생기기 전 node 버전인 16 이하로 다운그레이드하는 것도 방법이다. 

nvm install 16
nvm alias default 16
nvm use 16

이후 1의 방법처럼 기존 모듈 및 캐시를 삭제 후 새로 패키지를 설치하면 된다. 

저작자표시 비영리 변경금지 (새창열림)

'Programing > React-Native' 카테고리의 다른 글

[RN] 인생이 지루하다면 react-native upgrade (0.66.3 -> 0.72.5)  (1) 2023.11.15
[RN] 플로팅 버튼 아래로 스크롤 할 때만 나오게 구현(feat. reanimated)  (0) 2023.07.05
[RN] reanimated로 flipCard 만들기  (2) 2023.04.20
[RN] zsh에서 gradle 에 맞는 Java 버전변경 ( version 62 )  (0) 2023.01.27
[RN] android 빌드 실패 No connected devices  (0) 2023.01.22
    'Programing/React-Native' 카테고리의 다른 글
    • [RN] 인생이 지루하다면 react-native upgrade (0.66.3 -> 0.72.5)
    • [RN] 플로팅 버튼 아래로 스크롤 할 때만 나오게 구현(feat. reanimated)
    • [RN] reanimated로 flipCard 만들기
    • [RN] zsh에서 gradle 에 맞는 Java 버전변경 ( version 62 )
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바