Skip to content

Commit 455ce6a

Browse files
ysfscreamRed-Asuka
authored andcommitted
chore(pkg): bump electron version to 22.0.0
1 parent 6f50082 commit 455ce6a

File tree

12 files changed

+394
-558
lines changed

12 files changed

+394
-558
lines changed

package.json

+6-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"electron:build-win": "yarn run gen:version && vue-cli-service electron:build --win",
1313
"electron:build-linux": "export NODE_OPTIONS=--openssl-legacy-provider && yarn run gen:version && vue-cli-service electron:build --linux",
1414
"electron:build-mac": "export NODE_OPTIONS=--openssl-legacy-provider && yarn run gen:version && vue-cli-service electron:build --mac",
15-
"electron:serve": "yarn run gen:version && vue-cli-service electron:serve",
15+
"electron:serve": "export NODE_OPTIONS=\"--dns-result-order=ipv4first\" && yarn run gen:version && vue-cli-service electron:serve",
1616
"electron:serve:sql_debug": "export VUE_APP_SQL_DEBUG=true && yarn electron:serve",
1717
"postinstall": "electron-builder install-app-deps",
1818
"postuninstall": "electron-builder install-app-deps",
@@ -39,6 +39,7 @@
3939
"@ai-sdk/deepseek": "^0.1.12",
4040
"@ai-sdk/openai": "^1.1.14",
4141
"@ai-sdk/xai": "^1.1.12",
42+
"@electron/remote": "^2.1.2",
4243
"ai": "^4.1.46",
4344
"appdata-path": "^1.0.0",
4445
"avsc": "^5.7.7",
@@ -49,8 +50,8 @@
4950
"crypto-js": "^4.2.0",
5051
"csvtojson": "^2.0.10",
5152
"echarts": "^5.4.3",
52-
"electron-store": "^8.0.2",
53-
"electron-updater": "^5.0.5",
53+
"electron-store": "^8.1.0",
54+
"electron-updater": "^5.3.0",
5455
"element-ui": "^2.15.5",
5556
"fs-extra": "^8.1.0",
5657
"js-yaml": "^4.1.0",
@@ -113,7 +114,7 @@
113114
"babel-plugin-component": "^1.1.1",
114115
"babel-plugin-prismjs": "^2.1.0",
115116
"chai": "^4.1.2",
116-
"electron": "^13.6.6",
117+
"electron": "^22.0.0",
117118
"electron-devtools-installer": "^3.2.0",
118119
"eslint": "6.5.1",
119120
"eslint-config-prettier": "^6.11.0",
@@ -147,7 +148,7 @@
147148
"license": "Apache-2.0",
148149
"repository": "https://github.com/emqx/MQTTX",
149150
"resolutions": {
150-
"electron-builder": "23.0.2",
151+
"electron-builder": "23.6.0",
151152
"webpack": "4.47.0"
152153
}
153154
}

src/background.ts

+10-9
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import useServices from '@/database/useServices'
1919
import { dialog } from 'electron'
2020
import ORMConfig from './database/database.config'
2121
import version from '@/version'
22+
import { initialize } from '@electron/remote/main'
2223

2324
declare const __static: string
2425

@@ -39,8 +40,6 @@ let menu: Menu | null
3940
// Scheme must be registered before the app is ready
4041
protocol.registerSchemesAsPrivileged([{ scheme: 'app', privileges: { secure: true, standard: true } }])
4142

42-
app.allowRendererProcessReuse = false
43-
4443
const { ConnectionInit, ConnectionDestroy } = useConnection()
4544

4645
function handleIpcMessages() {
@@ -170,7 +169,6 @@ async function createWindow() {
170169
webPreferences: {
171170
devTools: isDevelopment,
172171
webSecurity: false,
173-
enableRemoteModule: true,
174172
nodeIntegration: true,
175173
contextIsolation: false,
176174
},
@@ -179,6 +177,12 @@ async function createWindow() {
179177
icon: `${__static}/app.ico`,
180178
})
181179

180+
// 初始化 @electron/remote
181+
initialize()
182+
if (win) {
183+
require('@electron/remote/main').enable(win.webContents)
184+
}
185+
182186
// Restore window state
183187
restoreWindowState(win)
184188

@@ -268,12 +272,9 @@ app.on('activate', () => {
268272

269273
// Disabled create new window
270274
app.on('web-contents-created', (event, contents) => {
271-
// tslint:disable-next-line:no-shadowed-variable
272-
contents.on('new-window', async (event, navigationUrl) => {
273-
// In this example, we'll ask the operating system
274-
// to open this event's url in the default browser.
275-
event.preventDefault()
276-
await shell.openExternal(navigationUrl)
275+
contents.setWindowOpenHandler(({ url }) => {
276+
shell.openExternal(url)
277+
return { action: 'deny' }
277278
})
278279
})
279280

src/components/ImportData.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
import { Component, Vue, Prop, Watch } from 'vue-property-decorator'
7979
import { Getter } from 'vuex-class'
8080
import fs from 'fs'
81-
import { remote } from 'electron'
81+
import { dialog } from '@electron/remote'
8282
import MyDialog from './MyDialog.vue'
8383
import YAML from 'js-yaml'
8484
import XMLConvert from 'xml-js'
@@ -148,7 +148,7 @@ export default class ImportData extends Vue {
148148
private getFileData() {
149149
let loading: ElLoadingComponent | undefined = undefined
150150
const extensionName = this.getExtensionName()
151-
remote.dialog
151+
dialog
152152
.showOpenDialog({
153153
properties: ['openFile'],
154154
filters: [{ name: '', extensions: [`${extensionName}`] }],

src/components/ImportScript.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
import { Component, Vue, Prop, Watch } from 'vue-property-decorator'
4949
import { Getter } from 'vuex-class'
5050
import fs from 'fs'
51-
import { remote } from 'electron'
51+
import { dialog } from '@electron/remote'
5252
import MyDialog from './MyDialog.vue'
5353
import { ElLoadingComponent } from 'element-ui/types/loading'
5454
@@ -81,7 +81,7 @@ export default class ImportScript extends Vue {
8181
private getFileData() {
8282
let loading: ElLoadingComponent | undefined = undefined
8383
const extensions = this.extension === 'avsc' ? ['avsc', 'json'] : [`${this.extension}`]
84-
remote.dialog
84+
dialog
8585
.showOpenDialog({
8686
properties: ['openFile'],
8787
filters: [{ name: '', extensions }],

src/main/newWindow.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { BrowserWindow } from 'electron'
22
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
3+
import { enable } from '@electron/remote/main'
34

45
interface WindowOptions {
56
theme: Theme
@@ -24,7 +25,6 @@ const newWindow = (id: string, options: WindowOptions) => {
2425
y,
2526
webPreferences: {
2627
webSecurity: false,
27-
enableRemoteModule: true,
2828
nodeIntegration: true,
2929
contextIsolation: false,
3030
},
@@ -44,6 +44,8 @@ const newWindow = (id: string, options: WindowOptions) => {
4444
// Load the index.html when not in development
4545
createWindow.loadURL(`app://./index.html/#${options.path}/${id}`)
4646
}
47+
// 添加 @electron/remote 初始化
48+
enable(createWindow.webContents)
4749
createWindow.on('closed', () => {
4850
createWindow = null
4951
})

src/main/updateDownloader.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import axios from 'axios'
22
import { BrowserWindow, IpcMainEvent, ipcMain } from 'electron'
33
import version from '@/version'
44
import { getCurrentLang, versionDetail } from './updateChecker'
5+
import { enable } from '@electron/remote/main'
56

67
const { autoUpdater } = require('electron-updater')
78

@@ -53,9 +54,9 @@ export async function createUpdateWindow() {
5354
webPreferences: {
5455
nodeIntegration: true,
5556
contextIsolation: false,
56-
enableRemoteModule: true,
5757
},
5858
})
59+
enable(updateWindow.webContents)
5960
updateWindow.loadURL(link)
6061
} catch (e) {
6162
return

src/store/modules/app.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Vue from 'vue'
22
import useServices from '@/database/useServices'
3-
import { remote } from 'electron'
3+
import { getGlobal } from '@electron/remote'
44

55
const TOGGLE_THEME = 'TOGGLE_THEME'
66
const TOGGLE_LANG = 'TOGGLE_LANG'
@@ -38,7 +38,7 @@ const getShowConnectionList = (): boolean => {
3838
return JSON.parse(_showConnectionList)
3939
}
4040

41-
const settingData = remote.getGlobal('sharedData')
41+
const settingData = getGlobal('sharedData')
4242

4343
const app = {
4444
state: {

src/utils/logger.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import log4js from 'log4js'
2-
import { app, remote } from 'electron'
2+
import { app } from 'electron'
3+
// 根据进程类型分别导入不同的 remote 模块
4+
const isRenderer = process.type === 'renderer'
5+
// 渲染进程使用 @electron/remote
6+
// 主进程使用 electron 的 app 模块
7+
const electronApp = isRenderer ? require('@electron/remote').app : app
38
import fs from 'fs-extra'
49
import path from 'path'
510

611
export const getOrCreateLogDir = () => {
712
const isRenderer: boolean = process.type === 'renderer'
813
// Render process use remote app
9-
const APP: Electron.App = isRenderer ? remote.app : app
14+
const APP: Electron.App = isRenderer ? electronApp : app
1015

1116
const STORE_PATH: string = APP.getPath('userData')
1217
const LOG_DIR: string = path.join(STORE_PATH, 'logs')

src/views/Home.vue

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<script lang="ts">
1313
import { Component, Vue } from 'vue-property-decorator'
1414
import { Getter, Action } from 'vuex-class'
15-
import { remote } from 'electron'
15+
import { nativeTheme } from '@electron/remote'
1616
import Ipc from '@/components/Ipc.vue'
1717
import Leftbar from '@/components/Leftbar.vue'
1818
import DatabaseError from '@/components/DatabaseError.vue'
@@ -38,7 +38,7 @@ export default class Home extends Vue {
3838
private updateActive: boolean = false
3939
4040
private setTheme(theme: Theme): void {
41-
const { shouldUseDarkColors } = remote.nativeTheme
41+
const { shouldUseDarkColors } = nativeTheme
4242
let currentTheme = theme
4343
if (this.syncOsTheme) {
4444
currentTheme = shouldUseDarkColors ? 'night' : 'light'

src/views/connections/ConnectionForm.vue

+6-6
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@
216216
</el-form-item>
217217
</el-col>
218218
<el-col :span="2">
219-
<a href="javascript:;" class="icon-oper" @click="getFilePath('ca')">
219+
<a href="javascript:;" class="icon-oper" @click="getFileContent('ca')">
220220
<i class="el-icon-folder-opened"></i>
221221
</a>
222222
</el-col>
@@ -226,7 +226,7 @@
226226
</el-form-item>
227227
</el-col>
228228
<el-col :span="2">
229-
<a href="javascript:;" class="icon-oper" @click="getFilePath('cert')">
229+
<a href="javascript:;" class="icon-oper" @click="getFileContent('cert')">
230230
<i class="el-icon-folder-opened"></i>
231231
</a>
232232
</el-col>
@@ -236,7 +236,7 @@
236236
</el-form-item>
237237
</el-col>
238238
<el-col :span="2">
239-
<a href="javascript:;" class="icon-oper" @click="getFilePath('key')">
239+
<a href="javascript:;" class="icon-oper" @click="getFileContent('key')">
240240
<i class="el-icon-folder-opened"></i>
241241
</a>
242242
</el-col>
@@ -594,9 +594,9 @@
594594
</template>
595595

596596
<script lang="ts">
597-
import { remote } from 'electron'
598597
import { Component, Vue, Prop, Watch } from 'vue-property-decorator'
599598
import { Getter, Action } from 'vuex-class'
599+
import { dialog } from '@electron/remote'
600600
import _ from 'lodash'
601601
import time from '@/utils/time'
602602
import useServices from '@/database/useServices'
@@ -776,8 +776,8 @@ export default class ConnectionForm extends Vue {
776776
this.record.clientIdWithTime = !this.record.clientIdWithTime
777777
}
778778
779-
private getFilePath(key: 'ca' | 'cert' | 'key') {
780-
remote.dialog
779+
private getFileContent(key: 'ca' | 'cert' | 'key') {
780+
dialog
781781
.showOpenDialog({
782782
properties: ['openFile'],
783783
filters: [{ name: 'CA', extensions: ['crt', 'key', 'pem', 'jks', 'der', 'cer', 'pfx'] }],

src/views/settings/index.vue

+3-2
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,8 @@
420420
<script lang="ts">
421421
import { Component, Vue } from 'vue-property-decorator'
422422
import { Getter, Action } from 'vuex-class'
423-
import { ipcRenderer, remote } from 'electron'
423+
import { ipcRenderer } from 'electron'
424+
import { nativeTheme } from '@electron/remote'
424425
import ImportData from '@/components/ImportData.vue'
425426
import ExportData from '@/components/ExportData.vue'
426427
import ClearUpHistoryData from '@/components/ClearUpHistoryData.vue'
@@ -518,7 +519,7 @@ export default class Settings extends Vue {
518519
519520
private handleSyncOsThemeSwitchChange(value: boolean) {
520521
if (value) {
521-
const theme = remote.nativeTheme.shouldUseDarkColors ? 'night' : 'light'
522+
const theme = nativeTheme.shouldUseDarkColors ? 'night' : 'light'
522523
this.handleSelectChange('theme', theme)
523524
}
524525
this.actionSyncOsTheme({ syncOsTheme: value })

0 commit comments

Comments
 (0)