기존 프로젝트를 쳐내고 오랜만에 다시 electron을 건들던 중...
과거엔 electron-builder를 이용해서 패키징과 컴파일링을 진행했는데,
이번에 공식 홈페이지에 가보니 electron-forge가 메인 빌더라고 적혀있었다.
https://www.electronjs.org/docs/latest/tutorial/tutorial-packaging
그래서 electron-forge로 빌더 교체를 진행하고 여러 가지 컴파일링을 시도해 봤다.
그러나....
윈도우 -> 윈도우의 컴파일링은 잘 진행된 반면
윈도우 -> linux, arm64로의 컴파일링은 오류가 나왔다.
바로 여러분이 검색해서 들어오셨을 Error: node-gyp failed to rebuild 이 나와버렸다.
그러므로 해당 에러의 분석을 먼저 해봤다.
1. node-gyp라는 라이브러리에서 오류가 발생하며
2. Visual Studio 버전 체크가 일어나고 있다
라는 결론에 도달했기 때문에 우선 npm node-gyp에서 설명들을 들여다보자
https://www.npmjs.com/package/node-gyp?activeTab=readme
참고. node-gyp는 node.js로 쓰인 크로스플랫폼 컴파일링 라이브러리인데 당연하게도 크로스플랫폼을 지원하기 위해서는 네이티브 빌드를 위해서 MSbuild 같은 cpp빌더가 필요하다
node-gyp에서 말하는 필수 설치요소들은 다음과 같다.
1. Python
2. Visual Studio Community or Visual Studio Build Tools
(1) 파이썬은 설치 후 환경변수 설정 및 node-gyp setting이 필요하다.
- 파이썬 환경변수 설정하는 방법은 추후에 예정(알잘딱깔센으로 설치하길 바람)
나는 npm을 이용해서 node-gyp를 사용하기 때문에 아래 커맨드를 입력해 준다.
npm config set python /path/to/executable/python
뒤의 path는 자신의 컴퓨터에 맞는 path로 입력! (ex. C:\Python310)
(2) Visual Studio Community or Visual Studio Build Tools를 설치하기 전에 node_modules를 잠깐 보자
node-gyp를 보면 find-visualstudio.js가 있는데 해당 코드에서 Visual Studio와 Visual Studio Build Tools의 버전을 체킹 하는 걸 알 수 있다.
해당 코드를 보고 추측하건대 Visual Studio의 버전은 2017, 2019, 2022만 유효하지 않을까 라는 예상을 하며
다음의 프로세스를 진행해 준다.
2-1) Visual Studio Installer를 켠 후 수정을 눌러준다
2-2) 아래와 같은 문구를 보고 Visual Studio Installer에서 c++를 사용한 데스크톱 개발을 열심히 재설치하면 안 된다.
우리는 node-gyp를 이용해서 컴파일링 할 것이므로!!!!!!
Node.js개발에서 우측의 C++를 사용한 데스크톱 개발을 사용해야 한다
2-3) node-gyp이 Windows 10에서 ARM64를 컴파일링 하기 위해서는 Visual C++ compilers과 Visual C++ ATL for ARM64를 설치하라고 했으니 해당 기능을 체크해서 설치하면 된다.
자. 이제 준비는 끝났다.
electron-forge의 cli를 이용해서 간단하게 컴파일링을 시도해 보자.
https://www.electronforge.io/cli
아래 그림에서 체크한 사항들을 잘 보고 CLI를 입력하면 된다.
현재 script 없이 진행하므로(나는 현재 platform=win32, arch=x64) 아래 명령어를 통해 Make를 진행해 준다.
npx electron-forge make
위에 체크했듯이 default값들이 있기 때문에 테스트용 Make는 괜찮다.
해당 명령어를 실행하면 현재 환경에 맞는 실행파일을 생성해 준다!!!
결과물은 exe파일로 잘 뽑혀서 나온다 ㅎㅎ
여기까지 따라오느라 고생 많았습니다~~
electron-forge를 사용하면서 확실히 문서화나 환경세팅이 electron-builder보다는 깔끔해진 걸 느꼈다.
하지만 크로스컴파일링에 이름에 맞게 OS -> 타 OS로의 컴파일링은 지원되지 않는다는 게 아쉬웠다 ㅠㅠ
다음 시간에는 WSL를 이용해서 Windows -> Linux 환경으로의 컴파일링을 진행해 보겠다.