Skip to content

Instantly share code, notes, and snippets.

@LearnShare
Last active March 20, 2026 09:08
Show Gist options
  • Select an option

  • Save LearnShare/c0e838896c6516d97ca23e775e443766 to your computer and use it in GitHub Desktop.

Select an option

Save LearnShare/c0e838896c6516d97ca23e775e443766 to your computer and use it in GitHub Desktop.
Manual Download Electron 手动下载 Electron

Manual Download Electron

手动下载 electron 并添加到缓存目录中

1. Get latest version for current os

获取适合当前系统的最新版本

node mde.js

# https://github.com/electron/electron/releases/download/v41.0.3/electron-v41.0.3-win32-x64.zip
# C:\Users\learnshare\AppData\Local\Cache\electron\fef4e930717eea902a8ae3e4a245018a80bfc75e41963b3b41c41eb6c098c83f\electron-v41.0.3-win32-x64.zip

2. Get specific version for current os

获取适合当前系统的指定版本

node mde.js 22.3.16

# https://github.com/electron/electron/releases/download/v22.3.16/electron-v22.3.16-win32-x64.zip
# C:\Users\learnshare\AppData\Local\Cache\electron\3db385b352e23d0c2d92c5d51ec91dfcdbfb76196d8b46c0acefe06f676d9e00\electron-v22.3.16-win32-x64.zip

Continue npm install with cache file

继续 npm install 即可使用缓存文件

#!/usr/bin/env node
const https = require('https');
const os = require('os');
const path = require('path');
const crypto = require('crypto');
const url = require('url');
// ===== 1. 平台 & 架构映射 =====
function getPlatform() {
const platform = process.platform;
switch (platform) {
case 'win32':
return 'win32';
case 'darwin':
return 'darwin';
case 'linux':
return 'linux';
default:
throw new Error(`Unsupported platform: ${platform}`);
}
}
function getArch() {
const arch = process.arch;
switch (arch) {
case 'x64':
return 'x64';
case 'arm64':
return 'arm64';
case 'ia32':
return 'ia32';
default:
throw new Error(`Unsupported arch: ${arch}`);
}
}
// ===== 2. 获取最新 Electron 版本 =====
function getLatestVersion() {
return new Promise((resolve, reject) => {
https.get('https://registry.npmjs.org/electron/latest', (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
try {
const json = JSON.parse(data);
resolve(json.version);
} catch (err) {
reject(err);
}
});
}).on('error', reject);
});
}
// ===== 3. 构造下载 URL =====
function getDownloadURL(version, platform, arch) {
const base = 'https://github.com/electron/electron/releases/download';
const artifactName = 'electron';
const filename = `${artifactName}-v${version}-${platform}-${arch}.zip`;
return `${base}/v${version}/${filename}`;
}
// ===== 4. 计算缓存目录(对齐 @electron/get 逻辑)=====
function getCacheDirectory(downloadUrl) {
const parsedDownloadUrl = url.parse(downloadUrl);
const { pathname } = parsedDownloadUrl;
// 去掉 filename,只保留目录部分
const strippedUrl = url.format({
protocol: parsedDownloadUrl.protocol,
host: parsedDownloadUrl.host,
pathname: path.dirname(pathname || 'electron')
});
return crypto.createHash('sha256').update(strippedUrl).digest('hex');
}
// ===== 5. 获取缓存根目录 =====
function getCacheRoot() {
// 对齐 env-paths('electron', { suffix: '' }).cache 的逻辑
const platform = process.platform;
const home = os.homedir();
switch (platform) {
case 'win32':
return path.join(home, 'AppData', 'Local', 'Cache', 'electron');
case 'darwin':
return path.join(home, 'Library', 'Caches', 'electron');
case 'linux':
return path.join(home, '.cache', 'electron');
default:
throw new Error(`Unsupported platform: ${platform}`);
}
}
// ===== 6. 获取文件名 =====
function getFileName(version, platform, arch) {
return `electron-v${version}-${platform}-${arch}.zip`;
}
// ===== 主流程 =====
(async () => {
try {
// 获取版本(从参数或 npm)
let version = process.argv[2];
if (!version) {
console.log('未指定版本,正在查询最新版本...');
version = await getLatestVersion();
}
// 获取平台信息
const platform = getPlatform();
const arch = getArch();
// 构造下载 URL
const downloadUrl = getDownloadURL(version, platform, arch);
const fileName = getFileName(version, platform, arch);
// 计算缓存路径
const cacheRoot = process.env.electron_config_cache || getCacheRoot();
const cacheDir = getCacheDirectory(downloadUrl);
const cachePath = path.join(cacheRoot, cacheDir, fileName);
// 输出结果
console.log('\n========================================');
console.log('Electron 手动下载信息');
console.log('========================================\n');
console.log(`版本: ${version}`);
console.log(`平台: ${platform}`);
console.log(`架构: ${arch}`);
console.log(`\n📥 下载 URL:`);
console.log(`${downloadUrl}`);
console.log(`\n💾 缓存路径:`);
console.log(`${cachePath}`);
console.log(`\n💡 说明:`);
console.log(`1. 下载上述 URL 的 zip 文件`);
console.log(`2. 将文件保存到缓存路径`);
console.log(`3. 在项目中继续完成 electron 安装`);
console.log('\n========================================\n');
} catch (err) {
console.error('错误:', err.message);
process.exit(1);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment