{"id":45772806,"url":"https://github.com/kurisu994/belobog-stellar-grid","last_synced_at":"2026-04-01T19:32:02.023Z","repository":{"id":277648427,"uuid":"933095196","full_name":"kurisu994/belobog-stellar-grid","owner":"kurisu994","description":"🦀 一个安全高效的 Rust WebAssembly 库，用于将 HTML 表格数据导出excel库","archived":false,"fork":false,"pushed_at":"2026-02-10T01:16:13.000Z","size":681,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-10T06:44:07.695Z","etag":null,"topics":["csv","excel-export","export","table","wasm","webassembly"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kurisu994.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE_APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-15T06:03:56.000Z","updated_at":"2026-02-10T01:16:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"04f13d1a-15d0-4ca1-b552-0cae47fc977a","html_url":"https://github.com/kurisu994/belobog-stellar-grid","commit_stats":null,"previous_names":["kurisu994/-wasm-excel-exporte"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/kurisu994/belobog-stellar-grid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurisu994%2Fbelobog-stellar-grid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurisu994%2Fbelobog-stellar-grid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurisu994%2Fbelobog-stellar-grid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurisu994%2Fbelobog-stellar-grid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kurisu994","download_url":"https://codeload.github.com/kurisu994/belobog-stellar-grid/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurisu994%2Fbelobog-stellar-grid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29848637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T22:37:40.667Z","status":"online","status_checked_at":"2026-02-26T02:00:06.774Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csv","excel-export","export","table","wasm","webassembly"],"created_at":"2026-02-26T07:30:34.413Z","updated_at":"2026-04-01T19:32:02.004Z","avatar_url":"https://github.com/kurisu994.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n  \u003ch1\u003e\u003ccode\u003ebelobog-stellar-grid\u003c/code\u003e\u003c/h1\u003e\n\n  \u003cp\u003e\u003cstrong\u003e🦀 现代化的 WebAssembly 表格导出库\u003c/strong\u003e\u003c/p\u003e\n\n  \u003cp\u003e一个安全、高效、易用的 Rust WebAssembly 库，用于将 HTML 表格导出为 CSV 和 XLSX 文件\u003c/p\u003e\n\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/badge/version-1.1.8-blue.svg\" alt=\"Version\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/rust-edition%202024-orange.svg\" alt=\"Rust Edition\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/test_coverage-100%25-brightgreen.svg\" alt=\"Test Coverage\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-MIT%2FApache--2.0-green.svg\" alt=\"License\" /\u003e\n    \u003ca href=\"https://github.com/kurisu994/belobog-stellar-grid\"\u003e\u003cimg src=\"https://img.shields.io/badge/github-belobog--stellar--grid-181717.svg?logo=github\" alt=\"GitHub\" /\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\n\u003csub\u003eBuilt with 🦀🕸 by \u003ca href=\"https://rustwasm.github.io/\"\u003eRust and WebAssembly\u003c/a\u003e\u003c/sub\u003e\n\n\u003c/div\u003e\n\n---\n\n## 📋 项目简介\n\n`belobog-stellar-grid` 是一个高性能的 WebAssembly 库，让你可以轻松地在浏览器中将 HTML 表格导出为 CSV/XLSX 文件。项目采用模块化架构设计，包含完善的文件名验证、RAII 资源管理和分批异步处理机制。\n\n### 为什么选择这个库？\n\n- **🎯 零配置**：开箱即用，无需复杂的设置\n- **🚀 极致性能**：Rust 原生速度 + WebAssembly 优化\n- **🔒 企业级安全**：内置文件名验证，防止路径遍历攻击\n- **📦 轻量级**：约 1.3MB 的 WASM 文件（Gzip 压缩后约 450KB）\n- **✅ 100% 测试覆盖**：190 个单元测试 + 47 个 E2E 测试确保代码质量\n- **🏗️ 模块化架构**：清晰的模块设计，易于维护和扩展\n- **🌍 国际化支持**：完美支持中文、日文、韩文等 Unicode 字符\n- **💾 多格式导出**：支持 CSV 和 XLSX (Excel) 两种格式\n\n### ✨ 核心特性\n\n#### 🛡️ 安全性\n\n- **RAII 资源管理**：`UrlGuard` 自动清理 Blob URL\n- **文件名安全验证**：阻止路径遍历、危险字符等 10+ 种威胁\n- **全面错误处理**：所有函数返回 `Result\u003cT, JsValue\u003e`\n- **内存安全保证**：得益于 Rust 的所有权系统\n- **中文错误消息**：用户友好的错误提示\n- **公式注入防护**：自动转义 CSV/Excel 中的危险字符（=, +, -, @）\n\n#### 🚀 性能优化\n\n- **零拷贝操作**：直接操作 DOM，参数使用 `\u0026str` 引用\n- **分批异步处理**：支持百万级数据导出，避免页面卡死\n- **内存安全**：使用 Rust 默认分配器，确保安全性和性能\n- **LTO 优化**：链接时优化减少最终 WASM 大小\n- **实时进度反馈**：支持大型表格的进度回调\n\n#### 🛠️ 高级功能\n\n- **合并单元格支持**：完美支持 `rowspan` 和 `colspan`，保持表格结构\n- **多工作表导出**：支持将多个表格导出到同一个 Excel 文件的不同 Sheet\n- **数据导出模式**：不依赖 DOM，直接支持 JS 数组/对象导出\n- **树形数据支持**：自动处理树形结构数据，实现层级缩进\n- **智能过滤**：自动检测并排除隐藏的行/列 (`display: none`)\n- **容器查找**：自动在容器元素中查找表格\n- **Web Worker 支持**：将导出计算移至 Worker 线程，避免主线程阻塞\n- **字节生成模式**：`generate_data_bytes` 支持仅生成文件字节而不触发下载，适用于 Worker 场景\n- **流式 CSV 导出**：`export_data_streaming` 分块写入降低内存峰值，适合超大数据集\n- **冻结窗格**：XLSX 导出自动冻结表头行，支持自定义冻结行/列数\n- **Excel 样式定制**：三级样式体系（全局→列级→单元格），支持字体、颜色、边框、背景色、对齐、数字格式等\n- **Excel 在线预览**：基于 calamine 在 WASM 侧解析 xlsx/xls 文件，渲染为 HTML `\u003ctable\u003e` 保留原始样式，支持双输出（HTML 直出 + JSON 结构化数据）\n\n## 🚀 快速开始\n\n### 30 秒上手\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  \u003chead\u003e\n    \u003cscript type=\"module\"\u003e\n      import init, { export_table, ExportFormat } from \"./pkg/belobog_stellar_grid.js\";\n\n      // 1. 初始化（只需一次）\n      await init();\n\n      // 2. 导出为 CSV（默认）\n      document.getElementById(\"csv-btn\").onclick = () =\u003e {\n        export_table(\"my-table\", \"数据.csv\");\n      };\n\n      // 3. 导出为 Excel\n      document.getElementById(\"xlsx-btn\").onclick = () =\u003e {\n        export_table(\"my-table\", \"数据.xlsx\", ExportFormat.Xlsx);\n      };\n    \u003c/script\u003e\n  \u003c/head\u003e\n  \u003cbody\u003e\n    \u003ctable id=\"my-table\"\u003e\n      \u003ctr\u003e\n        \u003cth\u003e姓名\u003c/th\u003e\n        \u003cth\u003e年龄\u003c/th\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n        \u003ctd\u003e张三\u003c/td\u003e\n        \u003ctd\u003e25\u003c/td\u003e\n      \u003c/tr\u003e\n    \u003c/table\u003e\n    \u003cbutton id=\"csv-btn\"\u003e导出 CSV\u003c/button\u003e\n    \u003cbutton id=\"xlsx-btn\"\u003e导出 Excel\u003c/button\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n\n就是这么简单！ 🎉\n\n---\n\n### 📦 安装方式\n\n#### NPM 安装（推荐）\n\n```bash\n# pnpm（推荐）\npnpm add belobog-stellar-grid\n\n# NPM\nnpm install belobog-stellar-grid\n\n# Yarn\nyarn add belobog-stellar-grid\n```\n\n#### 框架集成包（可选）\n\n```bash\n# React 封装\npnpm add @bsg-export/react\n\n# Vue 3 封装\npnpm add @bsg-export/vue\n\n# Svelte 封装（兼容 Svelte 4/5）\npnpm add @bsg-export/svelte\n\n# Solid.js 封装\npnpm add @bsg-export/solid\n\n# Web Worker 支持（大数据量场景推荐）\npnpm add @bsg-export/worker\n\n# 仅类型定义\npnpm add -D @bsg-export/types\n```\n\n#### CDN 引入（无构建工具场景）\n\n你可以直接通过 `unpkg` 或 `jsDelivr` 等 CDN 服务，在 HTML 中以原生 ES Modules 方式引入，无需安装任何依赖或使用打包工具：\n\n```html\n\u003cscript type=\"module\"\u003e\n  // 引入后，模块会自动从同一 CDN 路径拉取 .wasm 文件\n  import init, { export_table } from \"https://unpkg.com/belobog-stellar-grid@1.0.8/pkg/belobog_stellar_grid.js\";\n\n  await init();\n  export_table(\"my-table\", \"导出数据.csv\");\n\u003c/script\u003e\n```\n\n#### 从源码构建\n\n```bash\ngit clone https://github.com/kurisu994/belobog-stellar-grid.git\ncd belobog-stellar-grid\nwasm-pack build --target web\n```\n\n---\n\n### 💻 基本用法\n\n#### 统一导出 API（推荐）\n\n```javascript\nimport init, { export_table, ExportFormat } from \"belobog-stellar-grid\";\n\n// 初始化模块（只需执行一次）\nawait init();\n\n// 导出为 CSV（默认）\nexport_table(\"table-id\");\nexport_table(\"table-id\", \"销售报表_2024.csv\");\n\n// 导出为 Excel\nexport_table(\"table-id\", \"销售报表_2024.xlsx\", ExportFormat.Xlsx);\nexport_table(\"table-id\", \"销售报表_2024\", ExportFormat.Xlsx); // 自动添加扩展名\n```\n\n#### 带进度条的导出\n\n```javascript\nimport { export_table, ExportFormat } from \"belobog-stellar-grid\";\n\n// CSV 格式带进度（不排除隐藏行）\nexport_table(\"large-table\", \"大数据.csv\", ExportFormat.Csv, false, (progress) =\u003e {\n  console.log(`进度: ${Math.round(progress)}%`);\n  progressBar.style.width = `${progress}%`;\n});\n\n// Excel 格式带进度（排除隐藏行）\nexport_table(\"large-table\", \"报表.xlsx\", ExportFormat.Xlsx, true, (progress) =\u003e {\n  console.log(`进度: ${Math.round(progress)}%`);\n  progressBar.style.width = `${progress}%`;\n});\n```\n\n#### 分批异步导出（大数据量）\n\n```javascript\nimport { export_table_to_csv_batch } from \"belobog-stellar-grid\";\n\n// 基本用法 - 处理 10,000+ 行数据\nawait export_table_to_csv_batch(\"huge-table\", \"大数据.csv\");\n\n// 高级用法 - 自定义配置\nawait export_table_to_csv_batch(\n  \"huge-table\",\n  \"百万数据.csv\",\n  1000, // 每批处理 1000 行\n  (progress) =\u003e {\n    console.log(`进度: ${Math.round(progress)}%`);\n  },\n);\n```\n\n#### 错误处理\n\n```javascript\nimport { export_table, ExportFormat } from \"belobog-stellar-grid\";\n\ntry {\n  export_table(\"table-id\", \"报表\", ExportFormat.Xlsx);\n  alert(\"✅ 导出成功！\");\n} catch (error) {\n  console.error(\"导出失败:\", error);\n  alert(\"❌ 导出失败: \" + error);\n}\n```\n\n---\n\n### 🎨 完整示例\n\n\u003e **🌐 在线演示**：[https://kurisu994.github.io/belobog-stellar-grid/examples/](https://kurisu994.github.io/belobog-stellar-grid/examples/)\n\n查看 [examples/](./examples/) 目录获取完整示例：\n\n| 示例                       | 难度                                                   | 描述                                           |\n| -------------------------- | ------------------------------------------------------ | ---------------------------------------------- |\n| basic-export.html          | ![简单](https://img.shields.io/badge/难度-简单-green)  | 基础导出示例                                   |\n| progress-export.html       | ![中等](https://img.shields.io/badge/难度-中等-yellow) | 进度显示示例                                   |\n| advanced-features.html     | ![进阶](https://img.shields.io/badge/难度-进阶-orange) | 高级特性示例                                   |\n| container-export.html      | ![中等](https://img.shields.io/badge/难度-中等-yellow) | 容器元素导出示例                               |\n| array-export.html          | ![进阶](https://img.shields.io/badge/难度-进阶-orange) | 数组导出（嵌套表头 + 数据合并）示例            |\n| tree-export.html           | ![进阶](https://img.shields.io/badge/难度-进阶-orange) | 树形数据导出（递归拍平 + 层级缩进）示例        |\n| style-export.html          | ![进阶](https://img.shields.io/badge/难度-进阶-orange) | Excel 样式定制（三级样式体系）示例             |\n| multi-sheet-export.html    | ![进阶](https://img.shields.io/badge/难度-进阶-orange) | 多工作表导出示例                               |\n| cdn-export.html            | ![简单](https://img.shields.io/badge/难度-简单-green)  | CDN 引入（无构建工具）示例                     |\n| worker-export.html         | ![高级](https://img.shields.io/badge/难度-高级-red)    | Web Worker 导出（避免主线程阻塞）示例          |\n| virtual-scroll-export.html | ![高级](https://img.shields.io/badge/难度-高级-red)    | 虚拟滚动导出（百万级数据）示例                 |\n| streaming-export.html      | ![高级](https://img.shields.io/badge/难度-高级-red)    | 流式 CSV 导出（分块 Blob 降低内存峰值）示例    |\n| excel-preview.html         | ![中等](https://img.shields.io/badge/难度-中等-yellow) | Excel 在线预览（解析 xlsx/xls 渲染为表格）示例 |\n| benchmark.html             | ![高级](https://img.shields.io/badge/难度-高级-red)    | 性能基准测试（E2E Benchmark）                  |\n\n#### 框架集成示例\n\n每个框架封装包都包含完整的可运行 Rsbuild 示例项目，位于 `packages/\u003c框架\u003e/examples/` 目录下：\n\n| 框架     | 目录                        | 描述                                  |\n| -------- | --------------------------- | ------------------------------------- |\n| React    | `packages/react/examples/`  | DOM 导出 + 数据导出 + Worker 后台导出 |\n| Vue 3    | `packages/vue/examples/`    | DOM 导出 + 数据导出 + Worker 后台导出 |\n| Svelte 5 | `packages/svelte/examples/` | DOM 导出 + 数据导出 + Worker 后台导出 |\n| Solid.js | `packages/solid/examples/`  | DOM 导出 + 数据导出 + Worker 后台导出 |\n| Worker   | `packages/worker/examples/` | ExportWorker 类完整用法（React 实现） |\n\n运行框架示例：\n\n```bash\ncd packages/react/examples   # 或 vue/svelte/solid/worker\npnpm install\npnpm dev\n# 访问 http://localhost:3000/\n```\n\n**运行示例**：\n\n```bash\n# 1. 构建项目\nwasm-pack build --target web\n\n# 2. 启动本地服务器\ncargo install basic-http-server\nbasic-http-server .\n\n# 3. 访问 http://localhost:4000/examples/\n```\n\n---\n\n## 📚 API 参考\n\n\u003e **提示**：该项目包含详细的 API 文档 [API.md](./API.md)。AI 辅助开发请参考 [llms.txt](./llms.txt)。\n\n### 核心函数速览\n\n- **`export_table`**：统一导出函数（推荐）。\n- **`export_data`**：JS 数据直接导出，支持树形和复杂表头。\n- **`generate_data_bytes`**：生成 CSV/XLSX 文件字节（不触发下载），专为 Web Worker 场景设计。\n- **`export_tables_xlsx`**：导出多 Sheet Excel。\n- **`export_table_to_csv_batch`**：CSV 异步分批导出。\n- **`export_table_to_xlsx_batch`**：XLSX 异步分批导出。\n- **`export_tables_to_xlsx_batch`**：多工作表分批异步 XLSX 导出。\n- **`export_data_streaming`**：流式 CSV 导出（分块写入，降低内存峰值）。\n- **`parseExcelToHtml`**：解析 Excel 文件并返回 HTML Table 字符串，保留原始样式。\n- **`parseExcelToJson`**：解析 Excel 文件并返回结构化 JSON 数据。\n- **`getExcelSheetList`**：获取 Excel 文件的工作表列表信息。\n\n更多细节请查阅 [API.md](./API.md)。\n\n---\n\n### 👁️ Excel 预览\n\n支持在浏览器端解析 Excel 文件并渲染为 HTML 表格，保留原始样式（字体、颜色、边框、合并单元格、主题色）。\n\n```javascript\nimport init, { parseExcelToHtml, parseExcelToJson, getExcelSheetList } from \"belobog-stellar-grid\";\n\nawait init();\n\n// 从 File 或 fetch 获取 Excel 文件的 Uint8Array\nconst file = input.files[0];\nconst data = new Uint8Array(await file.arrayBuffer());\n\n// 方式一：直接渲染为 HTML\nconst html = parseExcelToHtml(data, { sheetIndex: 0, maxRows: 1000, skipHidden: true });\ndocument.getElementById(\"preview\").innerHTML = html;\n\n// 方式二：获取结构化 JSON 数据\nconst workbook = parseExcelToJson(data, { sheetIndex: 0, trimEmpty: true });\nconsole.log(workbook.sheets[0].rows);\n\n// 获取工作表列表\nconst sheets = getExcelSheetList(data);\nsheets.forEach((s) =\u003e console.log(`${s.name} (${s.rows}×${s.cols})${s.hidden ? \" [隐藏]\" : \"\"}`));\n```\n\n**框架预览组件**：\n\n```tsx\n// React\nimport { useExcelPreview, ExcelPreview } from \"@bsg-export/react\";\n\n// Vue\nimport { useExcelPreview, ExcelPreview } from \"@bsg-export/vue\";\n```\n\n---\n\n## 🤖 AI 辅助支持\n\n本项目提供 `llms.txt` 文件，专为 LLM（大语言模型）设计。您可以将其内容作为上下文提供给 AI 助手，以便快速了解库的使用方法和 API。\n\n---\n\n## 🔧 开发指南\n\n### 环境要求\n\n| 工具      | 版本要求    |\n| --------- | ----------- |\n| Rust      | 1.85.0+     |\n| wasm-pack | latest      |\n| Node.js   | 16+（可选） |\n\n**安装工具**：\n\n```bash\n# 安装 Rust\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# 安装 wasm-pack\ncargo install wasm-pack\n```\n\n---\n\n### 常用命令\n\n```bash\n# 构建项目\nwasm-pack build --target web\n\n# 运行单元测试\ncargo test\n\n# 运行性能基准测试\ncargo bench --bench export_benchmarks\n\n# 运行 E2E 测试（需先构建 WASM）\ncd e2e \u0026\u0026 npm install \u0026\u0026 npx playwright install chromium \u0026\u0026 npx playwright test\n\n# 代码检查\ncargo check\ncargo fmt\ncargo clippy\n\n# 运行示例\nbasic-http-server .\n# 访问: http://localhost:4000/examples/\n```\n\n### 发布到 npm\n\n项目支持两种发布方式：**GitHub Actions 自动发布**（推荐）和**本地手动发布**。\n\n#### 前置要求\n\n```bash\n# 安装 just\ncargo install just\n\n# 安装 cargo-edit（用于版本管理）\ncargo install cargo-edit\n```\n\n#### 🚀 自动发布（推荐）\n\n使用 GitHub Actions 自动构建和发布，只需一行命令：\n\n```bash\njust ci-release patch   # 补丁版本 1.0.0 -\u003e 1.0.1\njust ci-release minor   # 次要版本 1.0.0 -\u003e 1.1.0\njust ci-release major   # 主要版本 1.0.0 -\u003e 2.0.0\n```\n\n该命令会自动：\n\n1. 升级 `Cargo.toml`、`README.md`、`packages/*/package.json` 版本号\n2. 更新 `CHANGELOG.md`（将 `[Unreleased]` 替换为版本号 + 日期）\n3. 提交更改并打 Git 标签\n4. 推送到 GitHub，触发 CI 流水线\n\n**CI 流水线**（`.github/workflows/ci.yml`）触发后执行：\n\n1. **代码质量检查** — `cargo fmt`、`cargo clippy`、`cargo test`\n2. **WebAssembly 构建** — `wasm-pack build --target web --release`\n3. **浏览器测试** — Puppeteer 自动化验证 WASM 加载和基本功能\n4. **发布主包** — 将 `pkg/` 发布到 npm（`belobog-stellar-grid`）\n5. **发布子包** — 构建并发布 `@bsg-export/types`、`@bsg-export/react`、`@bsg-export/vue`、`@bsg-export/svelte`、`@bsg-export/solid`、`@bsg-export/worker`\n6. **创建 GitHub Release** — 自动提取 CHANGELOG 生成发布说明，附带 WASM 构建产物\n\n\u003e ⚠️ 需要在 GitHub 仓库 Settings → Secrets 中配置 `NPM_TOKEN`\n\n#### 🔧 手动发布\n\n如需本地手动发布：\n\n```bash\n# 1. 升级版本\njust bump patch\n\n# 2. 构建和优化\njust build\njust optimize\n\n# 3. 发布前测试\njust dry-run\n\n# 4. 发布主包到 npm\njust publish latest    # 发布稳定版\njust publish beta      # 发布 beta 版\n\n# 5. 构建并发布子包\njust build-packages      # 构建 types/react/vue\njust publish-packages    # 发布到 npm（默认 latest tag）\n```\n\n#### 子包说明\n\n| 子包                 | 说明                          | 依赖                |\n| -------------------- | ----------------------------- | ------------------- |\n| `@bsg-export/types`  | 严格 TypeScript 类型定义      | 无                  |\n| `@bsg-export/react`  | React Hook + 组件封装         | `@bsg-export/types` |\n| `@bsg-export/vue`    | Vue 3 Composable + 组件封装   | `@bsg-export/types` |\n| `@bsg-export/svelte` | Svelte Store 封装 + 组件      | `@bsg-export/types` |\n| `@bsg-export/solid`  | Solid.js Primitive + 组件封装 | `@bsg-export/types` |\n| `@bsg-export/worker` | Web Worker 导出封装           | `@bsg-export/types` |\n\n\u003e 子包版本号在 `just bump` 时会自动与主包同步。\n\n#### 其他命令\n\n```bash\njust info       # 查看当前版本\njust test       # 运行测试\njust build      # 构建 WASM\njust optimize   # 优化 WASM 文件大小\njust e2e        # 运行 E2E 测试（Playwright）\n```\n\n### 项目结构\n\n```\nbelobog-stellar-grid/\n├── src/                    # 源代码（8,500+ 行 Rust）\n│   ├── lib.rs             # 主入口（仅模块声明和重导出）\n│   ├── validation.rs      # 文件名验证（含 1 个内联测试）\n│   ├── resource.rs        # RAII 资源管理（UrlGuard）\n│   ├── core/              # 核心导出模块组\n│   │   ├── mod.rs         # 统一 API 和协调\n│   │   ├── style.rs       # Excel 导出样式模块（三级样式体系，含 13 个内联测试）\n│   │   ├── table_extractor.rs  # 表格数据提取（DOM 解析）\n│   │   ├── data_export.rs # 数据导出（嵌套表头、数据合并、树形数据，含 29 个内联测试）\n│   │   ├── export_csv.rs  # CSV 导出\n│   │   ├── export_xlsx.rs # XLSX 导出（合并单元格、冻结窗格、样式）\n│   │   ├── excel_reader.rs # Excel 解析核心（calamine + zip 样式 + 隐藏 Sheet，含 23 个内联测试）\n│   │   ├── excel_style.rs # OOXML 样式 → CSS 映射引擎（含 12 个内联测试）\n│   │   └── html_builder.rs # HTML Table 拼装器（含 8 个内联测试）\n│   ├── batch_export.rs    # 异步分批导出（CSV）\n│   ├── batch_export_xlsx.rs # 异步分批导出（XLSX）\n│   ├── streaming_export.rs # 流式 CSV 导出（分块写入 + Blob 拼接）\n│   └── utils.rs           # 调试工具（含 2 个内联测试）\n├── tests/                 # 集成测试目录（120 个测试）\n│   ├── lib_tests.rs       # 基础功能测试（41 个）\n│   ├── test_data_export.rs # 数据导出测试（34 个）\n│   ├── test_streaming_export.rs # 流式导出测试（26 个）\n│   ├── test_excel_preview.rs # Excel 预览测试（4 个）\n│   ├── test_resource.rs   # RAII 资源测试（8 个）\n│   ├── test_unified_api.rs # 统一 API 测试（4 个）\n│   └── test_security.rs   # 安全/CSV注入测试（3 个）\n├── benches/               # 性能基准测试（Criterion）\n│   └── export_benchmarks.rs # CSV/XLSX 生成 + CSV 注入转义 Benchmark\n├── e2e/                   # E2E 测试目录（Playwright，47 个测试）\n│   ├── playwright.config.ts # Playwright 配置\n│   └── tests/             # E2E 测试用例\n│       ├── basic-export.spec.ts      # 基础导出测试（7 个）\n│       ├── array-export.spec.ts      # 数组导出测试（9 个）\n│       ├── style-export.spec.ts      # 样式导出测试（7 个）\n│       ├── container-export.spec.ts  # 容器导出测试（5 个）\n│       ├── multi-sheet-export.spec.ts # 多工作表测试（3 个）\n│       ├── tree-export.spec.ts       # 树形数据测试（7 个）\n│       ├── wasm-init.spec.ts         # WASM 初始化测试（3 个）\n│       └── benchmark.spec.ts        # 性能基准测试（6 个）\n├── examples/              # 原生 HTML 示例目录（14 个示例）\n├── packages/              # 框架集成子包\n│   ├── types/             # @bsg-export/types - 严格 TypeScript 类型定义\n│   ├── react/             # @bsg-export/react - React Hook + 组件 + Excel 预览\n│   │   └── examples/      # Rsbuild + React 示例项目\n│   ├── vue/               # @bsg-export/vue - Vue 3 Composable + 组件 + Excel 预览\n│   │   └── examples/      # Rsbuild + Vue 3 示例项目\n│   ├── svelte/            # @bsg-export/svelte - Svelte Store 封装 + 组件\n│   │   └── examples/      # Rsbuild + Svelte 5 示例项目\n│   ├── solid/             # @bsg-export/solid - Solid.js Primitive + 组件\n│   │   └── examples/      # Rsbuild + Solid.js 示例项目\n│   └── worker/            # @bsg-export/worker - Web Worker 导出封装\n│       └── examples/      # Rsbuild + React Worker 示例项目\n├── pkg/                   # WASM 包输出\n├── API.md                 # API 详细文档\n├── CHANGELOG.md           # 更新日志\n├── CLAUDE.md              # AI 辅助开发指南\n├── llms.txt               # LLM 上下文文档\n├── justfile               # Just 命令配置\n└── README.md             # 项目文档\n```\n\n---\n\n## 🚀 性能指标\n\n### Benchmark 基准数据\n\n\u003e 以下数据基于 Playwright E2E Benchmark，每个场景运行 3 次取中位数（Chromium，本地环境）。\n\n| 场景                         | 中位数 | 范围    |\n| ---------------------------- | ------ | ------- |\n| WASM 初始化                  | ~16ms  | -       |\n| DOM CSV 导出（1000行×10列）  | ~14ms  | 11~36ms |\n| DOM XLSX 导出（1000行×10列） | ~40ms  | 31~56ms |\n| 纯数据 CSV（1000行×10列）    | ~8ms   | 6~9ms   |\n| 纯数据 XLSX（1000行×10列）   | ~25ms  | 24~27ms |\n| 树形 XLSX（~584节点）        | ~7ms   | 7~7ms   |\n\n运行 Benchmark：`cargo bench` (Rust) 或 `cd e2e \u0026\u0026 npx playwright test tests/benchmark.spec.ts` (E2E)\n\n\u003e **📈 历史趋势图表**：[https://kurisu994.github.io/belobog-stellar-grid/dev/bench/](https://kurisu994.github.io/belobog-stellar-grid/dev/bench/)\n\n### 运行时性能\n\n| 数据量       | 同步导出     | 分批异步导出  | 页面响应性       |\n| ------------ | ------------ | ------------- | ---------------- |\n| 1,000 行     | \u003c10ms        | \u003c10ms         | 无明显差异       |\n| 10,000 行    | ~1s（卡顿）  | ~1.2s（流畅） | **大幅改善**     |\n| 100,000 行   | ~10s（卡死） | ~12s（流畅）  | **从卡死到可用** |\n| 1,000,000 行 | 崩溃         | ~120s（流畅） | **完全解决**     |\n\n### 文件大小\n\n- WASM 原始大小：约 1.3MB（优化后）\n- Gzip 压缩后：约 450KB\n- Brotli 压缩后：约 400KB\n\n---\n\n## 📌 TODO / 开发路线图\n\n### ✨ 功能增强\n\n- [ ] **条件格式**: 支持根据数据值自动应用颜色/图标集等条件格式规则（rust_xlsxwriter 已支持底层 API）\n- [ ] **数据验证**: 支持 Excel 下拉列表、数值范围等数据验证规则\n- [ ] **图片导出**: 支持将图片（Base64/URL）插入到 Excel 单元格中\n- [ ] **数据选择与过滤**: 支持选择性导出特定行/列，以及数据预处理回调（`valueFormatter`）\n- [ ] **PDF 导出**: 基于现有 XLSX 生成能力，探索浏览器端 PDF 导出方案\n- [ ] **CSV 导入解析**: 提供 `parseCsvToJson` 函数，与 Excel 预览对称的 CSV 解析能力\n\n### ⚡ 性能与体验优化\n\n- [ ] **WASM 体积优化**: 探索 wasm-opt + 模块拆分策略，将核心导出与 Excel 预览分为独立包，按需加载\n- [ ] **增量导出**: 支持追加数据到已有文件，避免重复生成完整文件\n- [ ] **SharedArrayBuffer 支持**: 利用共享内存减少 Worker 与主线程间的数据拷贝开销\n- [ ] **虚拟化预览渲染**: Excel 预览大文件时支持虚拟滚动，避免 DOM 节点过多导致的性能问题\n\n### 🌍 生态扩展\n\n- [ ] **Node.js / 服务端支持**: 探索 `wasm32-wasip1` 在 Node.js / Deno / Bun 环境下运行的可行性\n- [ ] **Angular 封装**: 提供 `@bsg-export/angular` 官方封装（Service + Directive）\n- [ ] **Nuxt / Next.js 集成指南**: 提供 SSR/SSG 框架的最佳实践文档和示例\n\n---\n\n## 🤝 社区与支持\n\n### 获取帮助\n\n1. 📖 查看文档和示例\n2. 🔍 搜索 [Issues](https://github.com/kurisu994/belobog-stellar-grid/issues)\n3. 💬 加入 [讨论区](https://github.com/kurisu994/belobog-stellar-grid/discussions)\n4. 🐛 报告 [Bug](https://github.com/kurisu994/belobog-stellar-grid/issues/new)\n\n### 贡献方式\n\n我们欢迎各种形式的贡献：\n\n- 🐛 报告 Bug\n- 💡 提出新功能\n- 📖 改进文档\n- 🔧 提交代码\n- ⭐ Star 项目\n\n**代码规范**：\n\n- 遵循 Rust 编码规范（`cargo fmt`）\n- 通过 Clippy 检查（`cargo clippy`）\n- 为新功能添加测试\n\n---\n\n## 📄 许可证\n\n本项目采用双重许可证：\n\n- **[MIT License](LICENSE_MIT)** - 简单宽松\n- **[Apache License 2.0](LICENSE_APACHE)** - 更多法律保护\n\n---\n\n## 🙏 致谢\n\n感谢以下项目和社区：\n\n- [Rust](https://www.rust-lang.org/) - 强大的系统编程语言\n- [WebAssembly](https://webassembly.org/) - 革命性的 Web 技术\n- [wasm-bindgen](https://github.com/rustwasm/wasm-bindgen) - Rust 与 JS 的桥梁\n- [csv](https://github.com/BurntSushi/rust-csv) - 优秀的 CSV 处理库\n- [rust_xlsxwriter](https://github.com/jmcnamara/rust_xlsxwriter) - 高性能的 Excel 写入库\n- [Playwright](https://playwright.dev/) - 可靠的端到端测试框架\n- 所有贡献者和使用者 ❤️\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkurisu994%2Fbelobog-stellar-grid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkurisu994%2Fbelobog-stellar-grid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkurisu994%2Fbelobog-stellar-grid/lists"}