本方案使用 tauri-plugin-browser + 官方Chromium便携版 的最佳实践,将Chrome完全打包到exe中,实现应用自包含运行。
| 方案 | 体积 | 自包含 | 许可证 | 维护难度 | 推荐指数 |
|---|---|---|---|---|---|
| 系统WebView | 最小 | ❌ | ✅ | 简单 | ⭐⭐⭐ |
| Playwright集成 | 中等 | ❌ | ✅ | 中等 | ⭐⭐⭐⭐ |
| 本方案 | 60-80MB | ✅ | ✅ | 简单 | ⭐⭐⭐⭐⭐ |
| 直接打包Chromium | 80-100MB | ✅ | ⚠️ | 复杂 | ⭐⭐ |
# 方式一:下载并优化(推荐)
npm run download-chromium:optimize
# 方式二:仅下载(不优化)
npm run download-chromium
# 启动开发环境
npm run tauri:dev
# 方式一:使用自动化脚本(推荐)
./build-exe.sh
# 方式二:手动构建
npm run tauri:build:windows
your-project/
├── chromium/ # Chrome便携版目录
│ ├── chrome.exe # 主程序
│ ├── chrome_100_percent.pak
│ ├── chrome_200_percent.pak
│ ├── icudtl.dat
│ └── ...(其他必要文件)
├── src-tauri/
│ ├── tauri.conf.json # 已配置browser插件和资源
│ ├── Cargo.toml # 已添加tauri-plugin-browser
│ └── src/main.rs # 已设置Chromium路径
└── package.json # 已添加下载脚本
{
"plugins": {
"browser": {
"defaultAllow": true,
"allowlist": ["https://*", "http://*"]
}
},
"tauri": {
"bundle": {
"resources": ["../chromium/**/*"] // 打包时包含Chromium
},
"allowlist": {
"browser": {
"all": true
}
}
}
}
use tauri_plugin_browser::BrowserExt;
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_browser::init())
.setup(|app| {
// 设置自定义Chromium路径
let chromium_path = app.path_resolver()
.resolve_resource("chrome.exe")?;
if chromium_path.exists() {
app.browser().set_chromium_path(&chromium_path.to_string_lossy())?;
}
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
import { open } from '@tauri-apps/api/browser';
// 打开内嵌Chromium窗口
async function openChromiumWindow() {
await open('https://example.com', {
width: 1200,
height: 800,
title: '内嵌Chromium窗口'
});
}
# 指定平台和版本
.\download-chromium.ps1 -Platform "Win_x64" -Force
# 强制重新下载
.\download-chromium.ps1 -Force
# 启用体积优化
.\download-chromium.ps1 -Optimize
如果自动下载失败,可以手动下载:
Windows便携版:
chrome-win32.zip解压后:
chrome-win32 目录重命名为 chromium运行 npm run download-chromium:optimize 会自动删除:
Locales/ - 多语言包(保留en-US)swiftshader/ - 软件渲染器components/*.pak - 组件包docs/ - 文档文件*.pdb - 调试符号✅ chrome.exe # 主程序
✅ chrome_*.pak # 资源包
✅ icudtl.dat # ICU数据
✅ Locales/en-US/ # 英语语言包
✅ natives_blob.bin # 原生库
✅ snapshot_blob.bin # 快照数据
# 检查网络连接
curl -I https://commondatastorage.googleapis.com
# 使用代理(如果需要)
$env:HTTP_PROXY="http://proxy.company.com:8080"
npm run download-chromium
// 检查路径是否正确
println!("Chromium path: {:?}", chromium_path);
println!("Path exists: {}", chromium_path.exists());
# 检查chromium目录大小
du -sh chromium/
# 进一步优化:删除更多文件
cd chromium
rm -rf components/ swiftshader/ docs/
// 检查tauri.conf.json中的资源路径
{
"bundle": {
"resources": ["../chromium/**/*"]
}
}
// 在页面中注入优化设置
const { invoke } = window.__TAURI__.tauri;
// 禁用不必要的特性
await invoke('set_chromium_args', {
args: [
'--disable-background-timer-throttling',
'--disable-renderer-backgrounding',
'--disable-backgrounding-occluded-windows'
]
});
# 删除旧版本
rm -rf chromium/
# 下载新版本
npm run download-chromium:optimize
# 开发时使用系统Chrome(更快)
npm run tauri:dev
# 打包时使用内置Chromium
npm run tauri:build
# GitHub Actions示例
- name: Download Chromium
run: npm run download-chromium:optimize
- name: Build Application
run: npm run tauri:build
# 不要将chromium目录提交到Git
echo "chromium/" >> .gitignore
# 记录使用的Chromium版本
echo "Chromium version: $(cat chromium/VERSION)" > chromium-version.txt
本方案提供了将Chrome完全打包到exe中的最佳实践:
通过这个方案,你的应用将完全自包含,无需用户安装额外的浏览器依赖! 🚀