mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-24 02:20:10 +08:00
131 lines
3.6 KiB
JavaScript
131 lines
3.6 KiB
JavaScript
/**
|
||
* 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()
|
||
})
|