# asar-rust
[](https://crates.io/crates/asar-rust)
[](https://opensource.org/licenses/MIT)
[English](README.md)
[@electron/asar](https://github.com/electron/asar) 的 Rust 移植版本 — 以原生性能创建、提取和检查 Electron ASAR 归档文件。同时提供库(`asar_rust`)和命令行工具(`asar`)。
## 安装
### 命令行工具
```bash
cargo install asar-rust
```
### 库
```toml
[dependencies]
asar-rust = "0.1"
```
## CLI 用法
```bash
# 将目录打包为 ASAR 归档
asar pack ./my-app ./app.asar
# 列出归档中的所有文件
asar list ./app.asar
# 列出文件及其打包/解包状态
asar list ./app.asar --is-pack
# 提取单个文件
asar extract-file ./app.asar package.json
# 提取整个归档
asar extract ./app.asar ./output-dir
# 带选项打包
asar pack ./my-app ./app.asar \
--unpack "*.node" \
--unpack-dir "node_modules" \
--exclude-hidden \
--ordering ./ordering.txt
```
## 库 API
```rust
use asar_rust::asar::*;
// 创建 ASAR 归档
create_package("src_dir", "output.asar")?;
// 带选项创建
let options = CreateOptions {
dot: false,
ordering: Some("ordering.txt".into()),
unpack: Some("*.node".into()),
unpack_dir: Some("node_modules".into()),
};
create_package_with_options("src_dir", "output.asar", options)?;
// 列出所有文件
let files = list_package("output.asar", None)?;
for f in &files {
println!("{f}");
}
// 提取单个文件
extract_file("output.asar", "package.json", true)?;
// 提取整个归档
extract_all("output.asar", "dest_dir")?;
// 获取原始头部 JSON
let header = get_raw_header("output.asar")?;
// 查看归档内文件信息
let info = stat_file("output.asar", "src/main.js")?;
println!("大小: {}", info.size);
// 以交互方式打开和检查
let archive = AsarArchive::open("output.asar")?;
```
## 功能特性
- 📦 **打包/解包** — 从目录创建 ASAR 归档,支持完整或部分提取
- 📋 **列出/查询** — 查看归档内容及文件元数据
- 🔗 **符号链接支持** — 处理归档中的符号链接
- 🧩 **解包文件** — 通过 glob 模式指定需要保持解包状态的文件/目录
- ✅ **完整性校验** — 基于 SHA256 的头部完整性验证
- 🔒 **路径验证** — 防止路径穿越攻击
- 🚀 **高性能** — 优化的 release 编译配置(LTO、单 codegen 单元、体积优化)
## 兼容性
与 Node.js `@electron/asar` 包生成的 ASAR 归档完全兼容。任一工具创建的归档均可被另一方读取。
## 最低支持的 Rust 版本
Rust 1.85+(2024 edition)。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。