vue devtools 이슈에 따른 업그레이드
비용이 많이 들지 않는 선에서 업그레이드를 고려하기 위해서는 일렉트론 14버전이 적합해 보이나 현재 support되지 않는 버전이기 때문에 추후에 결국 업그레이드를 필요로 함
노드 16버전과 함께 사용하는 일렉트론 22버전이나 18버전과 함께 사용하는 25버전을 사용하는 것이 서포트되는 안정적인 버전
현재 프로젝트는 vue electron패키지를 사용 중이기 때문에 vue electorn 패키지와 호환이 되는지 확인이 필요
관련 글
yarn upgrade electron@13.6.9
렌더링 이슈발생
rm -rf node_modules
rm yarn.lock
yarn install
yarn.lock 파일이 없는 경우에 lru-cache라는 모듈에서 lru-cache@8.0.5: The engine "node" is incompatible with this module. Expected version ">=16.14". Got "14.21.3"
와 같은 에러가 발생하여 lru-cache 버전을 컨트롤 해주어야함
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
이슈 관련 이슈 Uncaught ReferenceError: module is not defined
에러 발생 이슈 빌드는 성공적으로 동작
위 이슈중 렌더링이 안되는 이유로 유력한 두 번째 이슈를 해결하기 위해 webPreferences에 contextIsolation: false,
옵션을 추가하여 테스트
Cannot read property 'members' of undefined at setObjectPrototype
이슈 발생 Git Issue1 Git Issue2Electron 13버전에서는 @electron/remote 를 기존 electron/remote 모듈 대신에 사용하려는 시도가 있고, 그에 따라 electron/remote를 코드 상 초기화 해주어야 함
main 프로세스에 @electron/remote를 초기화 하는 코드를 삽입 테스트
require("@electron/remote/main").initialize();
렌더링 가능 및 vue devtools 설치 및 실행 가능 추후 안정화 테스트를 위해 테스트 코드 작성 필요
node stable version 18.16.0 업그레이드
nvm install 18
노드 sass version 문제
error /home/jaeho/git/Coyote/node_modules/ : Command failed
yarn install
디펜던시 설치 성공
실행 시 Error: error:0308010C:digital envelope routines::unsupported
webpack 에러 발생
위 솔루션에서 제시한 방법 중 가장 간단한 방법인 audit 시도 해보았지만 실행은 정상적으로 되었으나 큰 변화가 있지 않았음
위 솔루션의 다음 방법으로 제시 된 방법인 webpack config를 수정해 해시 함수를 수정해주는 방법 시도
hashFunction: "sha512",
을 output 속성에 추가해주는 방법 시도해 보았지만 여전히 같은 에러가 발생
// HACK: OpenSSL 3 does not support md4 any more, but webpack hardcodes it all over the place: https://github.com/webpack/webpack/issues/13572
const crypto = require("crypto");
const crypto_orig_createHash = crypto.createHash;
crypto.createHash = algorithm => crypto_orig_createHash(algorithm == "md4" ? "sha256" : algorithm);
위 코드를 webpack config js 파일에 직접 추가함으로써 crypto 함수의 createHash 함수를 직접 수정하는 방법 시도
failed to build renderer process
렌더러 프로세스 빌드하는 도중 에러발생
위 이슈중 렌더링이 안되는 이유로 유력한 두 번째 이슈를 해결하기 위해 webPreferences에 contextIsolation: false,
옵션을 추가하여 테스트
Node Sass version 9.0.0 is incompatible with ^4.0.0
위 이슈 해결을 위해서 sass-loader
13.3 이상의 최신버전 업데이트 필요
TypeError: this.getOptions is not a function at Object.loader
타입에러 발생
참고
위 이슈를 해결하기 위해 webpack v5로 업그레이드 필요
그에 따라 webpack 설정 파일 변경
1. query
옵션 options
로 변경
2. configuration.devtool should match pattern "^(inline-|hidden-|eval-)?(nosources-)?(cheap-(module-)?)?source-map$
webpack 설정 스트릭트 이슈 devtool: "eval-cheap-module-source-map"
로 변경
기존에 Promise.all([startRenderer(), startMain()])
로 프로미스를 한 번에 실행시키는 과정에서 renderer가 먼저 실행되어야 webpackHotMiddleware
가 할당되는 현상
startRenderer()
.then(() => {
startMain().then(() => {
startElectron();
});
})
.catch((err) => {
console.error(err);
});
순차적으로 실행할 수 있도록 변경
[VueLoaderPlugin Error] No matching use for vue-loader is found.
참고
compilation.hooks.htmlWebpackPluginAlterChunks = new SyncWaterfallHook(['chunks', 'objectWithPluginRef']);
html-webpack-plugin
모듈 최신버전 업데이트
compilation.hooks.htmlWebpackPluginAfterEmit.tapAsync( TypeError: Cannot read properties of undefined (reading 'tapAsync')
compiler.hooks.afterEmit.tapAsync
compiler에서 직접 훅에 접근하는 방법으로 해결
options has an unknown property 'data'. These properties are valid
옵션 명 additionalData
로 변경
@electron/remote is disabled for this WebContents. Call require("@electron/remote/main").enable(webContents) to enable it
app.on("browser-window-created", (_, window) => {
require("@electron/remote/main").enable(window.webContents);
})
Cannot read properties of undefined (reading 'Menu')
App.vue
파일에서 기존방식으로 electron remote 사용하는 부분 아래와 같이 변경
const remote = require("@electron/remote");
Cannot read properties of undefined (reading 'app')
yarn upgrade electron-store@latest
Issue 현재 오픈되어 있는 이슈
yarn-lock파일 vuex-electron에 있는 electron-store 버전을 업그레이드
os.tmpDir is not a function
repo
전혀 업데이트 되고 있지 않은 모듈이라서 만약 사용하지 않는다면 코드에서 삭제 요망
Issue
새로운 버전의 크로미엄에서 발생하는 에러로 추정
ssl 관련 에러
Issue
Issue
CertVerifyProcBuiltin for 127.0.0.1 failed
로컬 머신에 ssh 접속을 시도하면서 생기는 문제
deep 셀렉터가 제대로 동작하지 않는 문제
style 코드에 scoped 파라미터를 제대로 넣지 않아서 /deep/이 동작하지 않는 현상
일렉트론 버전 업그레이드 후 다음과 같이 nested deep에 대해서는 /deep/ 텍스트가 그대로 들어가게 되어 속성이 적용되지 않음
제대로 /deep/을 사용하게 되면 다음과 같이 출력
새로운 버전에서 scope 오타를 사용하게 되었을 때
scoped 스타일을 제대로 사용하게 되었을 때
기존 버전에서는 동작했던 이유
electronProcess.kill("SIGKILL");
로 해결
if (browserWindow !== undefined)
this.preferenceToggle()
임시로 위와 같이 작성해서 이슈 해결 조금 더 디깅해볼 필요는 있어 보입니다. 또한 아래 핫로드 이슈와도 관련 있는 것 같습니다.
참고
custom-electron-titlebar
에서 remote 모듈 충돌 문제
참고
위 이슈에서 파생된 이슈로 보여집니다. 타이틀바에서 중복된 remote 모듈을 사용함으로써 위와 같은 핫로드 시에도 이슈가 발생하는 것으로 보입니다.
SIGINT 이벤트를 추가해 clean up 진행
이상하게도 .ivu-table-hidden
CSS 달려있는 것으로 확인
el-tabs__content
클래스에 height 속성 추가 시 확인 가능
CSS deep 셀렉터가 제대로 동작하지 않아서 발생하는 것으로 확인
deep 셀렉터 수정
핸들러 옵션 변경으로 해결
mainWindow.webContents.setWindowOpenHandler((details) => {
debugger;
return {
action: "allow",
overrideBrowserWindowOptions: {
frame: false,
parent: mainWindow,
webPreferences: {
plugins: true,
nodeIntegration: true,
enableRemoteModule: true,
contextIsolation: false,
webSecurity: false,
defaultFontFamily: {
sansSerif: "Arial",
},
},
},
};
});
현상은 우분투에서 같은 경로의 파일셀렉터를 두 번 오픈하려하면 나타나는 현상
일렉트론에서 다이얼로그를 두 번 부르는 현상이 발생하는 것으로 보임
Issue
Issue
Issue
현재 일렉트론 레벨에서 처리중인 이슈입니다.
윈도우즈에서 흰색 네모난 브라우저와 취소 시 Focus를 잃는 현상
Skia shader compilation error
babili-webpack-plugin is deprecated and teser-webpack-plugin is included with webpack5 default
BrowserView.{fromId, fromWebContents, getAllViews}
API 제거BrowserView
id 속성 제거webContents
인스턴스의 sub-frame에 접근할 수 있는 webFrameMain
API추가remote
모듈 @electron/remote
모듈로 변경contextIsolation
기본값 true로 변경worldSafeExecuteJavaScript
기본값 true로 변경crashReporter.start({compress})
기본값 true로 변경Flash
지원 제거contextIsolation
허용여부 확인할 수 있는 process.contextIsolated
속성 추가session.storagePath
API 추가new-window
이벤트 webContents.setWindowOpenHandler()
로 변경window.open()
frameName 파라미터가 더이상 윈도우 타이틀로 설정되지 않음app.allowRendererProcessReuse
제거remote
모듈 제거additionalFeatures
속성 제거worldSafeExecuteJavaScript
제거nativeWindowOpen
true로 기본값 설정affinity
옵션 제거safeStorage
추가WebContents
에 페이지에 frame이 생성될 때 호출되는 frame-created
이벤트 추가WebHID
API 지원app.requestSingleInstanceLock
데이터 파라미터 추가commandLine.removeSwitch
추가--force-process-config
옵션을 사용해 셋업해주어야 함crashReporter
API가 Breakpad 에서 Crashpad로 변경desktopCapture.getSources
API가 이제는 main process에서만 허용ses.setCodeCachePath()
API 추가WebContents
에 focus
, blur
이벤트 추가first-instance-ack
이벤트 추가setBackgroundColor
에 더 많은 컬러 포맷 추가nativeWindowOpen
제거
skipTaskbar
Linux에서 더이상 지원되지 않음WebPreferences.preloadURL
속성 제거webFrameMain.origin
추가WebContents.ipc
와 WebFrameMain.ipc
API 추가new-window
event 제거Display
오브젝트에 label
속성 추가app.getPreferredSystemLanguages()
API 추가WebUSB
API 지원 추가SerialPort.forget()
추가scroll-touch-*
이벤트 제거HttpOnly
쿠키를 필터할 수 있는 기능을 cookies.get()
에 추가nativeImage.createThumbnailFromPath(path, size)
API 변경net.fetch
메서드 추가Streams API
개선--watch
옵션, 파일 변경되면 자동으로 restart해주는 기능 기존의 nodemon
과 같은 기능node:test
모듈viewport size units
를 사용해 반응형 UI를 작성하는데 도움이 될 수 있음dvh
, lvh
, svh
FileSystemSyncAccessHandle
메서드 동기로 동작Cross Origin Embedder Policy
설정되지 않은 써드파티 콘텐츠를 가져오기 위해 credentialless
속성 사용 :picture-in-picture
수도 클래스nesting
기능 지원text-wrap:balance
CHIPS: Cookies Having Independent Partitioned State
Popover API
<dialog>
와 비슷한 기능을 하는 API 추가Release
ChangeLog
가장 안정적인 버전은 3.3.4 버전 현재 2.7.14 버전 사용중
일렉트론과 버전 호환보다 Chromium, Node 버전과의 호환성 이슈 가능성 존재.
node-sass issue
vue-cli-service issue
chromium issue
업그레이드를 진행하게 되면 미래의 업그레이드 비용을 줄이는 것도 고려하여 최신 안정화 버전의 Electron으로 업그레이드를 고려하는 것이 좋을 것 같습니다.
Electron stable versions:
Electron 업그레이드를 진행 시 이점
Playwright
새로운 버전 사용으로 더 확장성 있는 테스트 코드 작성Playwright
테스트 코드 VSCode 디버그 모드 사용Electron 업그레이드 비용