cherry-studio/scripts/update-electron-direct.js
2025-04-26 06:27:33 +08:00

131 lines
3.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Electron 直接版本更新脚本
*
* 这个脚本帮助您直接更新到指定版本的 Electron
* 使用方法: node scripts/update-electron-direct.js [version]
*
* 例如: node scripts/update-electron-direct.js 32.0.0
*/
const { execSync } = require('child_process')
const fs = require('fs')
const path = require('path')
const readline = require('readline')
// 创建命令行交互界面
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
// 获取当前 package.json 中的 Electron 版本
function getCurrentElectronVersion() {
const packageJsonPath = path.join(process.cwd(), 'package.json')
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
return packageJson.devDependencies.electron
}
// 更新 package.json 中的 Electron 版本
function updateElectronVersion(version) {
const packageJsonPath = path.join(process.cwd(), 'package.json')
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
// 保存旧版本
const oldVersion = packageJson.devDependencies.electron
// 更新版本
packageJson.devDependencies.electron = version
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf8')
console.log(`已更新 package.json 中的 Electron 版本: ${oldVersion} -> ${version}`)
return oldVersion
}
// 安装依赖
function installDependencies() {
console.log('正在安装依赖...')
try {
execSync('yarn install', { stdio: 'inherit' })
return true
} catch (error) {
console.error('安装依赖失败:', error.message)
return false
}
}
// 测试应用
function testApp() {
console.log('正在启动开发模式测试应用...')
try {
execSync('npm run dev', { stdio: 'inherit' })
return true
} catch (error) {
console.error('测试应用失败:', error.message)
return false
}
}
// 主函数
async function main() {
const targetVersion = process.argv[2]
if (!targetVersion) {
console.error('请指定目标 Electron 版本')
console.log('使用方法: node scripts/update-electron-direct.js [version]')
console.log('例如: node scripts/update-electron-direct.js 32.0.0')
rl.close()
return
}
const currentVersion = getCurrentElectronVersion()
console.log(`当前 Electron 版本: ${currentVersion}`)
rl.question(`确定要直接更新到 Electron ${targetVersion} 吗?(y/n) `, (answer) => {
if (answer.toLowerCase() !== 'y') {
console.log('操作已取消')
rl.close()
return
}
const oldVersion = updateElectronVersion(targetVersion)
if (!installDependencies()) {
console.log(`Electron ${targetVersion} 安装依赖失败,正在恢复到原版本 ${oldVersion}`)
updateElectronVersion(oldVersion)
installDependencies()
rl.close()
return
}
rl.question('依赖安装成功,是否测试应用?(y/n) ', (answer) => {
if (answer.toLowerCase() !== 'y') {
console.log('跳过测试步骤')
rl.close()
return
}
if (!testApp()) {
console.log(`Electron ${targetVersion} 测试失败`)
rl.question(`是否恢复到原版本 ${oldVersion}(y/n) `, (answer) => {
if (answer.toLowerCase() === 'y') {
console.log(`正在恢复到原版本 ${oldVersion}`)
updateElectronVersion(oldVersion)
installDependencies()
}
rl.close()
})
return
}
console.log(`Electron ${targetVersion} 更新并测试成功!`)
rl.close()
})
})
}
// 运行主函数
main().catch((error) => {
console.error('发生错误:', error)
rl.close()
})