티스토리 뷰
electron, electron-builder, robot.js 이 3가지의 버전이 서로 잘 호환이 되지 않아서 골치가 매우 아프다.
각 패키지의 업데이트 주기가 달라서 하나가 업데이트 됬을때 다른 패키지들도 같이 업데이트가 되어야하는데 오픈소스 기반이다보니 빠르게 대응이 안되는것같다.
결국 개발자가 각 패키지의 호환가능한 버전을 일일이 찾아야하는데 검색해도 호환되는 버전이 어떤 버전인지 정리해놓은곳을 찾을 수가 없었다.
아래와 같이 이상한 오류가 난다.
$ electron-builder install-app-deps
• electron-builder version=21.2.0
• loaded configuration file=package.json ("build" field)
• rebuilding native dependencies dependencies=robotjs@0.6.0, fsevents@1.2.13 platform=darwin arch=x64
• install prebuilt binary name=robotjs version=0.6.0 platform=darwin arch=x64
• build native dependency from sources name=robotjs
version=0.6.0
platform=darwin
arch=x64
reason=prebuild-install failed with error (run with env DEBUG=electron-builder to get more information)
error=prebuild-install info begin Prebuild-install version 5.3.6
prebuild-install info looking for cached prebuild @ /Users/simsimjae/.npm/_prebuilds/355e17-robotjs-v0.6.0-electron-v76-darwin-x64.tar.gz
prebuild-install http request GET https://github.com/octalmage/robotjs/releases/download/v0.6.0/robotjs-v0.6.0-electron-v76-darwin-x64.tar.gz
prebuild-install http 404 https://github.com/octalmage/robotjs/releases/download/v0.6.0/robotjs-v0.6.0-electron-v76-darwin-x64.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=8.5.2 runtime=electron arch=x64 libc= platform=darwin)
• rebuilding native dependency name=fsevents version=1.2.13
• rebuilding native dependency name=robotjs version=0.6.0
electron-builder 20버전대 까지는 이런 오류가 안나는데 21, 22버전대부터는 이런 오류가 발생한다.
https://github.com/octalmage/robotjs/releases/download/v0.6.0/robotjs-v0.6.0-electron-v76-darwin-x64.tar.gz
이 링크가 404라고 하는걸 보니 robotjs 0.6.0에서 애초에 일렉트론 v76을 지원하지 않나보다..
그래서 electron-builder의 버전을 20이하로 낮출수밖에 없는데.. 낮추면 robot.js 0.6.0을 빌드할 수 있게 되긴 한다.
$ electron-builder install-app-deps
• electron-builder version=20.44.4
• loaded configuration file=package.json ("build" field)
• rebuilding native production dependencies platform=darwin arch=x64
• rebuilding native dependency name=fsevents
• rebuilding native dependency name=robotjs
이렇게 electron-builder로 일렉트론과 robotjs가 호환가능하게 되었다.
근데 또 패키징할때 이상한 에러가 난다.
⨯ error: fork/exec /Users/simsimjae/Library/Caches/electron-builder/wine/wine-2.0.3-mac-10.13/bin/wine: bad CPU type in executable
path: /Users/simsimjae/Library/Caches/electron-builder/wine/wine-2.0.3-mac-10.13/bin/wine
args: /Users/simsimjae/Library/Caches/electron-builder/wine/wine-2.0.3-mac-10.13/bin/wine /Users/simsimjae/Library/Caches/electron-builder/winCodeSign/winCodeSign-2.4.0/rcedit-ia32.exe /Users/simsimjae/Desktop/knowledge-shopping-top/dist/win-unpacked/knowledge-shopping-top.exe --set-version-string FileDescription knowledge-shopping-top --set-version-string ProductName knowledge-shopping-top --set-version-string LegalCopyright Copyright © 2022 simsimjae --set-file-version 0.1.9 --set-product-version 0.1.9.0 --set-version-string InternalName knowledge-shopping-top --set-version-string OriginalFilename --set-version-string CompanyName simsimjae
output:
error output:
github.com/develar/app-builder/pkg/util.Execute
/Volumes/data/Documents/app-builder/pkg/util/util.go:61
github.com/develar/app-builder/pkg/wine.execWine
/Volumes/data/Documents/app-builder/pkg/wine/wine.go:92
github.com/develar/app-builder/pkg/wine.ConfigureCommand.func2
/Volumes/data/Documents/app-builder/pkg/wine/wine.go:43
github.com/alecthomas/kingpin.(*actionMixin).applyActions
/Volumes/data/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/actions.go:28
github.com/alecthomas/kingpin.(*Application).applyActions
/Volumes/data/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:557
github.com/alecthomas/kingpin.(*Application).execute
/Volumes/data/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:390
github.com/alecthomas/kingpin.(*Application).Parse
/Volumes/data/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:222
main.main
/Volumes/data/Documents/app-builder/main.go:78
runtime.main
/usr/local/Cellar/go/1.12.6/libexec/src/runtime/proc.go:200
runtime.goexit
/usr/local/Cellar/go/1.12.6/libexec/src/runtime/asm_amd64.s:1337
Error: /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-bin/mac/app-builder exited with code 1
at ChildProcess.<anonymous> (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/builder-util/src/util.ts:244:14)
at Object.onceWrapper (events.js:520:26)
at ChildProcess.emit (events.js:400:28)
at maybeClose (internal/child_process.js:1058:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:293:5)
From previous event:
at processImmediate (internal/timers.js:464:21)
From previous event:
at WinPackager.signAndEditResources (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/winPackager.ts:260:158)
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/winPackager.ts:362:21
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/graceful-fs/graceful-fs.js:209:16
at FSReqCallback.oncomplete (fs.js:179:23)
From previous event:
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/winPackager.ts:360:27
at Generator.next (<anonymous>)
From previous event:
at WinPackager.signApp (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/winPackager.ts:354:73)
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/platformPackager.ts:250:16
From previous event:
at WinPackager.doPack (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/platformPackager.ts:167:165)
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/platformPackager.ts:113:16
at Generator.next (<anonymous>)
From previous event:
at WinPackager.pack (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/platformPackager.ts:111:95)
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:430:24
at Generator.next (<anonymous>)
at processImmediate (internal/timers.js:464:21)
From previous event:
at Packager.doBuild (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:396:24)
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:366:57
at Generator.next (<anonymous>)
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/graceful-fs/graceful-fs.js:143:16
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/graceful-fs/graceful-fs.js:61:14
at FSReqCallback.oncomplete (fs.js:179:23)
From previous event:
at Packager._build (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:335:133)
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:331:23
at Generator.next (<anonymous>)
at processImmediate (internal/timers.js:464:21)
From previous event:
at Packager.build (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:288:14)
at build (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/index.ts:59:28)
at build (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/electron-builder/src/builder.ts:228:10)
at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/electron-builder/src/cli/cli.ts:49:19
에러를 대략 유추해보자면.. electron-builder(20버전대)에서 현재 Mac OS 버전(monteray, 카탈리나 이후부터)와 충돌이 있는듯하다.
https://github.com/electron-userland/electron-builder-binaries/issues/30
근데 이걸 해결할라면 또 electron-builder를 22버전으로 업데이트 해야 한단다 ㅋㅋ
근데 electron-builder 22 버전과 robot.js 0.6.0은 같이 쓸 수 없다. 다른 방법을 찾아야겠다. 이거 빌드하자고 Mac OS 버전을 내릴수도 없는 노릇이고 상당히 난감하다.
electron 버전과는 딱히 상관없는거같고 electron-builder와 robot.js를 잘 호환시키면 문제가 해결 될 듯 하다.
https://github.com/mapbox/node-pre-gyp/blob/master/lib/util/abi_crosswalk.json
abi라는것이 있는데 이게 node.js를 통해 컴파일된 다른 네이티브 모듈을 실행시켜주는 브릿지 역할을 하는것 같다.
그래서 노드 버전과 abi 버전이 일치해야 제대로 빌드가 되는 듯 하다.
electron-builder 20버전 이상에서는 robot.js가 절대로 빌드 되지 않는 현상이 발견됬다.
그렇다면 electron-builder를 20버전으로 맞춰놓고 다른 패키지를 여기에 맞추는게 낫겠다.
찾아보니까 electron-builder로 빌드 할때 bad cpu type이라는 오류가 발생하는 이유가
If it says something in the lines of Mach-O executable i386: Apple dropped support for 32bit executables with Catalina 10.15.
란다.
카탈리나부터 32비트 실행파일에 대한 지원을 중단했다고 한다.
근데 32비트 실행파일이 포함된걸 빌드하려고 하면 오류가 나는 것 같다. 그래서 로컬에서 도커를 깔아서 도커로 빌드를 하라는데.. 무슨 빌드 하나 하자고 그렇게 까지 해야하나 싶다. wine대신 wine64를 써야 한다는데 뭔 소린지 잘 모르겠다.
https://github.com/electron/releases
GitHub - electron/releases: 📦 Complete and up-to-date info about every release of Electron
📦 Complete and up-to-date info about every release of Electron - GitHub - electron/releases: 📦 Complete and up-to-date info about every release of Electron
github.com
여기 들어가보면 일렉트론 버전 별로 어떤 abi가 매칭되어있는지 나와있다.
Please upgrade to the latest v23.0.3 for macOS 12.3 support. |
또한, Mac OS 몬터레이는 12.3버전인데 이 OS에서 빌드하려면 electron-builder를 23.0.3로 업데이트 해야 한다고 한다.
그렇게 삽질 끝에 드디어 빌드 되는 조합을 찾아냈다.
devDependencies
{
"electron": "6.1.12",
"electron-builder": "23.0.2",
"robotjs": "^0.6.0",
}
package.json > scripts
{
"postinstall": "npm rebuild --runtime=electron --target=6.1.12 --disturl=https://atom.io/download/atom-shell --abi=73",
"rebuild": "npm rebuild --runtime=electron --target=6.1.12 --disturl=https://atom.io/download/atom-shell --abi=73"
}
node -> 14.19.1
mac -> monterey v12.3
근데 일렉트론 버전이 너무 낮아졌다.. 다른 조합도 가능한지 찾아보자.
{
"electron": "8.5.2",
"electron-builder": "23.0.2",
"robotjs": "^0.6.0,
}
package.json > scripts
{
"postinstall": "npm rebuild --runtime=electron --target=8.5.2 --disturl=https://atom.io/download/atom-shell --abi=76",
"rebuild": "npm rebuild --runtime=electron --target=8.5.2 --disturl=https://atom.io/download/atom-shell --abi=76"
}
node -> 14.19.1
mac -> monterey v12.3
- 일렉트론: 6.1.12, abi: 73 -> 맥 빌드 성공,
- 일렉트론: 7.3.3, abi: 75 -> 맥 빌드 성공,
- 일렉트론: 8.5.2, abi: 76 -> 맥 빌드 성공,
- 일렉트론: 9.4.4, abi: 80 -> 맥 빌드 실패,
-> abi 80부터는 robot.js와 호환이 불가한듯하다.
결론은 robot.js 를 사용하려면 현재 17버전이 최신인 일렉트론을 8.5.2까지 밖에 못올린다는 얘기다..
그래도 성공한 조합을 찾아서 다행이다.
robot.js와 같은 오픈소스를 가져다 사용할때 이게 진짜 큰 문제다. 저걸 만든 개발자도 무료로 만들어 배포하다보니 관리, 유지보수, 업데이트가 잘 되지 않는다. 차라리 개발문화가 오픈소스가 아니라 유료였으면 더 좋았을것같다는 생각도 든다.
'Electron' 카테고리의 다른 글
electron code signing (0) | 2022.03.25 |
---|---|
node-gyp 에러 정리 (0) | 2022.03.23 |
electron auto update 기능 총 정리 (0) | 2021.12.13 |
- Total
- Today
- Yesterday
- return type
- react
- reducer
- type alias
- promise
- webpack
- useRef
- await
- react hooks
- reflow
- atomic design
- rendering scope
- async
- javascript
- design system
- Polyfill
- hydrate
- es6
- Babel
- reactdom
- mobx
- typescript
- computed
- storybook
- Action
- useEffect
- server side rendering
- Next.js
- state
- props
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |